▶ 배열
: 배열은 간단히 여러 개의 변수를 모아서 정의하는 것을 의미
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 ");
$sum = $sum + $value;
$cnt = $cnt +1;
}
}
}
echo("<br>");
echo("소수 개수: $cnt ");
echo("<br>");
echo("소수 합: $sum ");
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차원 배열의 출력
테이블 태그에 넣어서 출력하기
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.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.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>");
?>
'PHP 공부 기록' 카테고리의 다른 글
PHP 7 - PHP와 오라클 연동 (입출력 프로그램) (0) | 2021.12.24 |
---|---|
PHP 6 - PHP를 이용한 DB 접속 (0) | 2021.12.12 |
PHP 4 - 폼(Form) (0) | 2021.11.19 |
PHP 3 - 반복문(1) (WHILE, DO..WHILE, FOR, Continue) + 소수 판별 프로그램 (0) | 2021.11.05 |
PHP 2 - 조건문 (IF, SWITCH) (0) | 2021.10.29 |