Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP foreach 루프 완벽 가이드 – 배열 순회의 기초부터 활용까지

PHP foreach 루프란?

foreach 문은 PHP에서 제공하는 반복문(loop) 구조 중 하나입니다. while, do-while, for 같은 다른 반복문이 주로 조건에 따라 반복하거나 정해진 횟수만큼 반복하는 데 사용되는 반면, foreach 루프는 배열의 요소를 처음부터 끝까지 순회(iterate)하는 데 특화되어 있어 배열 작업 시 가장 널리 쓰이는 반복문입니다.

기본 문법

foreach (array_expression as $value)
    statement

foreach (array_expression as $key => $value)
    statement

첫 번째 형태는 인덱스 배열(indexed array)을 순회할 때 사용합니다. 반복이 진행될 때마다 현재 요소가 $value 변수에 할당되며, PHP는 내부 포인터를 다음 요소로 이동시켜 배열의 끝에 도달할 때까지 루프 본문을 실행합니다.

두 번째 형태는 연관 배열(associative array)을 순회할 때 적합합니다. 매 반복마다 현재 요소의 키와 값이 각각 $key$value 변수에 담기고, 루프 본문이 실행된 후 포인터가 다음 키-값 쌍으로 이동하여 배열이 소진될 때까지 반복됩니다.

예제 1: 인덱스 배열 순회

아래 예제는 foreach 루프를 사용해 인덱스 배열의 각 요소에 2를 곱해 출력합니다.

<?php
$arr = array(2,4,6,8,10);
foreach ($arr as $i){
    echo $i . "*2=" . $i*2 . "\n";
}
?>

실행 결과:

2*2=4
4*2=8
6*2=12
8*2=16
10*2=20

예제 2: 연관 배열 순회

다음 예제는 과목명을 키로, 점수를 값으로 가지는 연관 배열을 foreach 루프로 순회합니다.

<?php
$arr = array("Phy"=>50, "Che"=>60, "Maths"=>70, "Bio"=>80);
foreach ($arr as $sub=>$marks){
    echo "marks in $sub: " . $marks . "\n";
}
?>

실행 결과:

marks in Phy: 50
marks in Che: 60
marks in Maths: 70
marks in Bio: 80

예제 3: 중첩 foreach로 2차원 배열 순회

2차원 배열은 중첩(nested) foreach 루프를 사용해 순회할 수 있습니다. 바깥쪽 루프가 각 행(row)을 가져오고, 안쪽 루프가 해당 행의 각 열(column) 값을 처리합니다.

<?php
$arr1=[1,2,3,4,5];
$arr2=[6,7,8,9,10];
$twodim=[$arr1,$arr2];
foreach ($twodim as $row){
    foreach ($row as $col){
        echo $col . " ";
    }
    echo "\n";
}
?>

실행 결과:

1 2 3 4 5
6 7 8 9 10

예제 4: 연관 배열로 이루어진 2차원 배열 순회

연관 배열들이 모인 2차원 배열 역시 중첩 foreach로 손쉽게 순회할 수 있습니다. 아래 예제는 학생별 정보(번호, 이름, 점수)를 담은 연관 배열 여러 개를 하나의 배열로 묶어 처리합니다.

<?php
$arr1=["rno"=>1, "name"=>"Kiran", "marks"=>50];
$arr2=["rno"=>2, "name"=>"anil", "marks"=>60];
$arr3=["rno"=>3, "name"=>"Bina", "marks"=>70];
$twodim=[$arr1,$arr2, $arr3];
foreach ($twodim as $row){
    foreach ($row as $k=>$v){
        echo $k . ":" . $v . " ";
    }
    echo "\n";
}
?>

실행 결과:

rno:1 name:Kiran marks:50
rno:2 name:anil marks:60
rno:3 name:Bina marks:70

참조(&)로 배열 요소 직접 수정하기

foreach 루프 안에서 원본 배열의 값을 변경하고 싶다면 변수 앞에 &(앰퍼샌드)를 붙여 참조(reference)로 전달하면 됩니다. 이 경우 복사본이 아닌 실제 배열 요소가 수정됩니다. 단, 루프가 끝난 후에는 unset()으로 참조 변수를 반드시 해제하는 것이 안전합니다.

<?php
$arr = [1, 2, 3];
foreach ($arr as &$v){
    $v *= 2;
}
unset($v); // 참조 해제
print_r($arr);
?>

실행 결과:

Array
(
    [0] => 2
    [1] => 4
    [2] => 6
)

정리

foreach 루프는 PHP에서 배열을 다룰 때 가장 직관적이고 안전한 반복 방법입니다. 인덱스 배열은 값만, 연관 배열은 키와 값을 함께 꺼내 쓸 수 있으며, 중첩 루프를 활용하면 2차원 배열이나 JSON처럼 계층화된 데이터 구조도 손쉽게 처리할 수 있습니다. 배열 요소를 수정해야 하는 경우에는 참조(&) 문법을 활용하면 됩니다.