▶ 배열

: 배열은 간단히 여러 개의 변수를 모아서 정의하는 것을 의미


1. 배열의 구조와 정의


▶ 1차원 배열

1차원 배열은 가장 기본적인 배열 구조로 선형으로 나열된 변수와 동일

$ar[1] = 'abc';

배열은 배열의 이름과 킷(Key)값(첨자) 그리고 값을 갖는다.

예를 들어 $ar[1]='abc' 에서 ar은 배열의 이름이고 대괄호([])안에 숫자 1은 배열의 킷값으로 첨자라고도 한다.

여기에 할당된 'abc'은 배열에 저장된 값이 된다.

$ar[1] = 'abc';
$ar[2] = 'def';
$ar[3] = 'ghi';

$ar과 같이 배열의 키값(첨자)이 정수인 배열을 스칼라 배열이라 한다. (배열의 킷값에 반드시 숫자만 이용X)

키값은 필요하다면 문자를 사용하는 것도 가능하다.

$row[sno] = 'S01009';
$row[sname] = '관우';
$row[syear] = 4;

$row 배열은 킷값이 sno, sname, syear이다. 이렇게 배열의 킷값이 문자인 것을 연관 배열이라고 한다.

 

$ar1 = array(1,2,3);
$ar2 = array(3 => "abc", 4 => "def", "ghi");
$ar3 = array("a" => "ab", "k" => "a2", 0 => 23);

array()는 배열을 생성하는 함수이다. 배열은 킷값을 가지므로 필요하다면 킷값을 지정할 수도 있고 지
정하지 않을 수도 있다. 생성된 $ar1, $ar2, $ar3의 구조는 다음과 같다.

 

<?
  $ar3 = array("a" => "ab", "k" => "a2", 23, "z" => 34, "bb");

  $a3 = count($ar3);

  print_r($ar3); echo("- count : $a3<br>");
?>

print_r 배열 출력하는 함수 (1차원 배열만 출력 가능)

 

$ar = array(1,2,3,4,5);
for($i = 0; $i < 5; $i++){
	$value = $ar[$i];
	echo("value : {$value}<br>");
}

 

배열내에 소수, 소수 개수, 소수의 합 출력

<?
$ar = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

    $cn = count($ar);
    $sum = 0;
    $cnt = 0;
    for($i=0; $i<$cn; $i++){
        $value = $ar[$i];
        if($value > 1){
            for($j =2 ; $value % $j != 0; $j++){}
            if($value == $j){
            echo("$value &nbsp;&nbsp;");
            $sum = $sum + $value;
            $cnt = $cnt +1;
            }
        }
    }
    echo("<br>");
    echo("소수 개수: $cnt &nbsp;&nbsp;");
    echo("<br>");
    echo("소수 합: $sum &nbsp;&nbsp;");
    echo("<br><hr><br>");
    show_source(__FILE__);
?>

 

▶ 2차원 배열

2차원 배열은 엑셀과 같은 스프레드쉬트 프로그램에서 보는 것처럼 행과 열을 가진 배열을 의미한다. 2차원 배열은 이전에 사용한 1차원 배열과 달리 킷값이 두 개인 배열로 각각의 킷값은 행과 열을 의미한다.

$ar[행][열]

$ar[0][0] = "a"; $ar[0][1] = "b"; $ar[0][2] = "c";
$ar[1][0] = "d"; $ar[1][1] = "e"; $ar[1][2] = "f";
$ar[2][0] = "g"; $ar[2][1] = "h"; $ar[2][2] = "i";

2차원 배열의 킷값을 기술할 때는 [행번호][열번호]순으로 기술한다. 예를 들어 $ar[2][1]은 2행 1열의 데이터로 "h"값을 나타낸다.
2차원 이상인 배열을 다차원 배열이라 하는데 다차원 배열은 킷값의 개수를 늘려 3차원 배열이나 4차원 배열로 확장이 가능하다.

 

다음은 array() 함수를 이용 $ar 배열을 생성한 것이다.

$ar = array(array("a","b","c"), array("d","e","f"),array("g","h","i"))

2차원 배열을 array() 함수를 이용해서 생성할 때 array()를 중첩해서 다차원 배열을 생성한다. 이와 같
은 방법은 가독성이 높아 일반적으로 사용되는 배열 생성 방법이다.

 

$ar = array(array(학번 => "915301",이름 => "공융", 학과 => "화학"),
	array(학번 => "915302",이름 => "사마간", 학과 => "화학"),
	array(학번 => "925303",이름 => "단규", 학과 => "화학"))

 

2차원 배열은 킷값이 두 개로 배열의 요소가 두 개의 킷값에 의해 결정

1차원 배열과 같이 $ar[0]이 스칼라 변수와 같이 값을 저장하는 것이 아니다. $ar[0]는 이제 1차원 배열로 간주
즉, $ar[0]는 (학번 => 915301, 이름 => 공융, 학과 => 화학)인 연관 배열로 인식

 

2차원 배열의 각 행을 1차원 배열로 추출한 다음 추출된 1차원 배열을 출력한다.

$count = count($ar);
for($i = 0; $i < $count; $i++) {
	echo("row = $i : {$ar[$i]['학번']} - {$ar[$i]['이름']} - {$ar[$i]['학과']} <br>");
}

for문을 이용하는 방법은 먼저 2차원 배열의 행의 수를 확인한 다음 행을 순서대로 읽어서 출력하는 방법이다. 

가장 읽기 편리하지만 행 번호에 해당하는 킷값이 정수로 구성돼야 한다는 단점이 있다.
그러나 이 방법은 가장 가독성이 높아서 프로그래밍에서 많이 사용되는 방법이다.
Count( ) 함수는 1차원 배열에서는 배열 요소의 수를 반환하고 2차원 배열에서는 행수를 반환한다.
2차원 배열의 출력

 

테이블 태그에 넣어서 출력하기

 

HTML 1 - 태그 및 Table

HTML (HyperText Markup Language) : 웹페이지를 이루는 가장 기본적인 구성요소 하이퍼텍스트와 마크업으로 이루어진다. 태그 기본 태그 , : html 문서의 시작과 끝을 알림 , : html 문서 외형에는 영향이

lemonandgrapefruit.tistory.com

ar03.php

<?
  $ar = array(array("학번" =>"91501","이름" => "공융", "학과" => "화학"),
        array("학번" =>"91502","이름" => "사마간", "학과" => "화학"),
        array("학번" =>"91503","이름" => "단규", "학과" => "화학"),
        array("학번" =>"91504","이름" => "마초", "학과" => "화학"));

  $count = count($ar);
  echo("<table border=1>");
  for($i = 0; $i <= $count-1; $i++){
    echo("<tr><td>{$ar[$i]["학번"]}</td><td>{$ar[$i]["이름"]}</td><td>{$ar[$i]["학과"]}</td></tr>");
  }

  show_source(__FILE__);
?>

 

행, 열 숫자를 입력받아 테이블을 출력하는 프로그램

table.html

<html>
<head>
<title>TABLE 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="table.php">
	행 : <input type="text" name="row"><br>
	열 : <input type="text" name="col"><br>
		    <input type="submit" name="확인" value="확인">
		    <input type="reset" name="취소" value="취소"><br>
  </form>
<hr>
<? show_source(__FILE__);?>
</html>

table.php

<?
   $row = $_POST["row"];
   $col = $_POST["col"];
   
   echo("<table border= 2>");
    for($i=1; $i<=$row; $i++){
        echo("<tr>");
        for($j=1; $j<=$col; $j++){
            echo("<td> $j </td>");
        }
        echo("</tr>");
    }
    echo("</table>");
    echo("<hr>");
    show_source(__FILE__);
?>

 

▶ 다음과 같이 채워진 2차원 배열을 생성하고 출력하는 프로그램을 작성

<?
  $k = 0;

  for($i = 0; $i < 5; $i++){
      for($j = 0; $j < 5; $j++){
        $k = $k+1;
        $ar[$i][$j] = $k;
      }
    }

    echo("<table border='1'>");
    for($i = 0; $i < 5; $i++){
      echo("<tr>");
      for($j = 0; $j < 5; $j++){
        echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
      }
      echo("</tr>");
    }
    echo("</table>");
?>

 

대각선으로 채워진 2차원 배열 출력한다. 

ar02

ar02

ar02.html

<html>
<head>
<title>ar02 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="ar02.php">
	홀수만 입력 : <input type="text" name="num"><br>
		    <input type="submit" name="확인" value="확인">
		    <input type="reset" name="취소" value="취소"><br>
  </form>
<hr>
<? show_source(__FILE__);?>
</html>

ar02.php

<?
  $num = $_POST["num"];
  if($num%2 == 0) {
        echo("
             <script>
             window.alert('홀수만 입력하세요');
             history.go(-1);
             </script>
            ");
        exit;
     }

  $k = 0;
  for($i = 0; $i < $num; $i++){
      for($j = 0; $j < $num; $j++){
          $k = $k+1;
          $ar[$j][$i] = $k;
      }
    }

    echo("<table border='1'>");
    for($i = 0; $i < $num; $i++){
      echo("<tr>");
      for($j = 0; $j < $num; $j++){
        echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
      }
      echo("</tr>");
    }
    echo("</table>");
?>

 

ar03

ar03

ar03.html

<html>
<head>
<title>ar03 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
  <form method="post" action="ar03.php">
	홀수만 입력 : <input type="text" name="num"><br>
		    <input type="submit" name="확인" value="확인">
		    <input type="reset" name="취소" value="취소"><br>
  </form>
<hr>
<? show_source(__FILE__);?>
</html>
더보기

ar03.php -------------------수정하기-------------

<?
$num = $_POST["num"];
if($num%2 == 0) {
      echo("
           <script>
           window.alert('홀수만 입력하세요');
           history.go(-1);
           </script>
          ");
      exit;
   }

$k = 0;
 for($i = 0; $i < $num; $i++){
   for($j = 0; $j < $num; $j++){
      if($i>=$num-$j){
         $k = $k+1;
          $ar[$i][$j] = $k;
      }else{
         $ar[$i][$j] = "";
      }
    }
 }

echo("<table border='1'>");
for($i = 0; $i < $num; $i++){
   echo("<tr>");
   for($j = 0; $j < $num; $j++){
      echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
    }
   echo("</tr>");
}
echo("</table>");
?>
<?
  $num = $_POST["num"];
  if($num%2 == 0) {
        echo("
             <script>
             window.alert('홀수만 입력하세요');
             history.go(-1);
             </script>
            ");
        exit;
     }

  $k = 0;
  $t = 0;
  for($i = 0; $i <= $num; $i++){
      for($j = 0; $j <= $num; $j++){
          //$k = $k+1;
          if($i>=num-$j){
            $k = $k+1;
            $ar[$i][$j+$t] = $k;
          }
          else{
            $ar[$i][$j] = "";
          }
          //$ar[$i][$j+$t] = $k;
      }
    }

    echo("<table border='1'>");
    for($i = 0; $i < $num; $i++){
      echo("<tr>");
      for($j = 0; $j <= $num; $j++){
        echo("<td width='84' align='center'> {$ar[$i][$j]} </td>");
      }
      echo("</tr>");
    }
    echo("</table>");
?>

+ Recent posts