본문 바로가기

프로그래밍 공부/PHP

PHP - while문, for문 그리고 foreach문

while문

PHP에서 사용하는 while문, for문들은 자바스크립트의 반복문인 while문과 for문과 똑같다.

1
2
3
4
5
6
7
<?php
    $i = 0;
    while($i <= 10){
        print $i ++;
        print "<br>";
    }
?>
cs

while문은 데이터의 수를 미리 알 수 없는 반복 처리에 편리하다. 아래와 같이 폴더 안에 있는 파일명과 디렉터리 명을 모두 표시하게 할 수 있다.

1
2
3
4
5
6
7
8
<?php
    if($dirhandle = opendir('.')){
        while(false !== ($filename = readdir($dirhandle))){
            print $filename."<br>";
        }
        closedir($dirhandle);
    }
?>
cs

if 문에서 지정하고 있는 opendir 함수를 사용해 opendir('.')로 지정하고 코드를 실행하고 있는 디렉터리의 핸들러인 $dirhandle을 오픈하면 opendir('.')안의 .가 코드를 실행하고 있는 디렉터리를 나타낸다. 오픈에 성공한 경우에만 if 안에 처리를 실행한다.

do while문도 자바스크립트의 do while문과 같다. while문에서는 처리를 실행하기 전에 조건을 판단하고, do while문에서는 처리를 먼저 실행하고 조건을 판단한다.

1
2
3
4
5
6
7
<?php
    $j = 0;
    do{
        print $j ++;
        print "<br>";
    }while($i <= 10);
?>
cs

for문

for문 역시 자바스크립트의 for문과 같다.

1
2
3
4
5
<?php
    for($i = 1$i < 5$i ++){
        print $i." 번째 반복이다.<br>";
    }
?>
cs

for문을 사용하면 풀다운 메뉴를 작성할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
    $PrefectureList = array(
        "서울특별시"
        "인천광역시"
        "대구광역시",
        "울산광역시",
        "광주광역시",
        "대전광역시",
        "부산광역시",
        "세종특별시",
        "경기도",
        "강원도",
        "황해도",
        "충청도",
        "경상도",
        "전라도",
        "함경도",
        "평안도"
    );
    for($i = 0$i <= count($PrefectureList- 1$i ++){
        print $PrefectureList[$i];
        print "<br>";
    }
?>
cs

배열에서 데이터를 꺼내려면 자바스크립트에서는 for in문을 사용하지만 PHP에서는 count 함수를 사용한다. count 함수는 배열의 개수를 반환한다.

풀다운 메뉴를 표시하려면 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
    $PrefectureList = array(
        "서울특별시"
        "인천광역시"
        "대구광역시",
        "울산광역시",
        "광주광역시",
        "대전광역시",
        "부산광역시",
        "세종특별시",
        "경기도",
        "강원도",
        "황해도",
        "충청도",
        "경상도",
        "전라도",
        "함경도",
        "평안도"
    );
    $html = "<select name=\"prefecture\">\n";
    for($i = 0$i <= count($PrefectureList- 1$i ++){
        $html .= "<option value=\"$i\">$PrefectureList[$i]</option>\n";
    }
    $html .= "</select>\n";
    print $html;
?>
cs

이전에 코드는 print를 사용해서 행정구역을 표시했지만, 한꺼번에 표시하기 위해서 $html에 문자열을 할당한다. <select>태그를 사용하고 for문 안에 반복 처리 안에는 <option>태그를 사용한다. 마지막에는 print $html;로 한번에 표시한다.

foreach문

foreach문을 사용하면 배열이나 연관 배열에서 간단하게 값만 꺼낼 수 있다. foreach문의 반복의 시작에 $배열 as $변수로 배열에 할당된 값을 배열의 앞에서부터 하나의 변수에 할당하여 처리를 실행한다.

1
2
3
4
5
6
7
<?php
    $week = array("월","화","수","목","금","토","일");
    foreach($week as $key){
        print $value;
        print "<br>";
    }
?>
cs

 

$week라는 배열을 만들고 내부의 값을 할당하는 변수 $value를 $week as $key로 지정한다. 배열안의 값의 수만큼 변수 $value에 순서대로 값이 할당되어 print문으로 출력이된다.

1
2
3
4
5
6
7
8
9
<?php
    $week = array("월","화","수","목","금","토","일");
    reset($week);
 
    while(list(,$value= each($week)){
        print $value;
        print "<br>";
    }
?>
cs

배열의 포인터라는 개념이 있다. foreach문, while문과 list함수 그리고 each 함수에서 배열을 처리하면 배열 안의 데이터를 가리키는 포인터가 이동한다. 바로 배열을 사용하는 처리를 계속할 때는 초인터에 대한 주의가 필요하다. foreach문은 처리 전에 배열의 포인터를 원위치 시키지만 이외에는 이전 처리에서 진행한 포인터 위치부터 시작하는 것이되기 때문에 의도와는 다른 동작을 할 수 있다. 위의 코드와 같이 reset($week);를 사용하면 배열의 포인트를 가장 앞으로 돌릴 수 있다.

연관배열에서 foreach문을 사용하면 키(key)와 값(value)을 동시에 꺼낼 수 있다. $배열 as $변수$배열 as $키 => $변수로 변경하면 된다. $변수에 키와 연관된 값이 할당이 된다.

1
2
3
4
5
6
7
8
<?php
    $member = array("name" => "김철수","age" => 20,"height" => 180);
 
    foreach($member as $key => $value){
        print "$key : $value";
        print "<br>";
    }
?>
cs

$member as $key => $value를 지정하기 위해 $key에 키를 할당하고 키와 관련된 값을 $value에 할당한다. 반복 처리를 하고 처음으로 돌아와 키와 값이 있으면 처리를 실행하고 키와 값이 더 이상 없으면 반복 처리를 종료한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    $member = array("name" => "김철수","age" => 20,"height" => 180);
 
    foreach($member as $key => $value){
        if($key == "name"){
            $title = "이름";
        }else{
            if($key == "age"){
                $title = "연령";
            }else{
                if($key == "height"){
                    $title = "신장";
                }
            }
        }
        print "$title : $value";
        print "<br>";
    }
?>
cs

if문으로 key를 골라내서 key를 다른 것으로 출력을 하게 만들 수 있다.