티스토리 뷰

PHP

배열 원소 순회, foreach()

블로그 강승 2021. 4. 2. 18:18

배열 원소 순회, foreach()

foreach() 함수는 배열의 각 원소마다 코드 블록을 한 번씩 수행한다.

$meal = array('breakfast' => '호두 번',
				'lunch' => '캐슈너트와 양송이버섯',
                'snack' => '말린 오디',
                'dinner' => '칠리 소스 가지 볶음');
print "<table>\n";
foreach ($meal as $key => $value) {
	print "<tr><td>$key</td><td>$value</td></tr>\n";
}
print'</table>';

foreach()는 $meal 배열의 각 원소에 대해 $key 변수에 키를, $value 변수에 값을 복사한 뒤 중괄호 내부의 코드를 실행한다. 키와 원소의 값을 담을 변수의 이름은 마음대로 정할 수 있다.
하지만, froeach() 구문 이전에 사용했던 변수명을 그대로 사용하면 원래 변수의 값은 덮어씌워진다.

$row_styles = array('even', 'odd');
$style_index = 0;

$meal = array('breakfast' => '호두 번',
				'lunch' => '캐슈너트와 양송이버섯',
                'snack' => '말린 오디',
                'dinner' => '칠리 소스 가지 볶음');
print "<table>\n";
foreach ($meal as $key => $value) {
	print '<tr class="' . $row_styles[$style_index] . '">';
    print "<td>$key</td><td>$value</td></tr>\n";
    //style_index 변수에 0과 1을 번갈아 지정한다.
    $style_index = 1 - $style_index;
}
print '</table>';

/* 출력 결과
<table>
<tr class="even"><td>breakfast</td><td>호두번</td></tr>
<tr class="odd"><td>lunch</td><td>캐슈너트와 양송이버섯</td></tr>
<tr class="even"><td>snack</td><td>말린 오디</td></tr>
<tr class="odd"><td>dinner</td><td>칠리 소스 가지 볶음</td></tr>
</table>

foreach() 코드 블록 내부에서 $key나 $value 같은 루프 변수의 값이 바뀌어도 실제 배열의 원소에는 아무런 영향을 미치지 않는다. 만약 배열 원소의 값을 바꾸고자 한다면 $key 변수를 배열의 색인으로 활용해야 한다.

$meals = arry('walnut Bun' => 1,
				'Cashew Nuts and White Mushrooms' => 4.95,
                'Dried Mulberries' => 3.00,
                'Eggplant with Chili Sauce' => 6.50);

foreach($meals as $dish => $price){
	// $price = $price * 2 구문은 효과가 없다.
    $meals[$dish] = $meals[$dish] * 2;
}

// 다시 한 번 배열을 순회하며 변경된 값을 출력한다.
foreach ($meals as $dish => $price) {
	printf("%s 메뉴의 변경된 가격은 \$%.2f입니다. \n" ,$dish,$price);
}

/* 출력 결과
Walnut BUn 메뉴의 변경된 가격은 $2.00입니다.
Cashew Nuts and White Mushrooms 메뉴의 변경된 가격은 $9.90입니다.
Dried Mulberries 메뉴의 변경된 가격은 $6.00입니다.
Eggplant with Chili Sauce 메뉴의 변경된 가격은 $13.00입니다.

foreach()에서 숫자 키 배열을 사용할 때는 아래 처럼 축약된 형식으로 쓸 수 있다.

$dinner = array('스위트콘과 아스파라거스',
				'레몬 치킨',
                '삶은 망태버섯');
foreach ($dinner as $dish) {
	print "주문 가능 메뉴: $dish\n";
}

/* 출력 결과
주문 가능 메뉴: 스위트콘과 아스파라거스
주문 가능 메뉴: 레몬 치킨
주문 가능 메뉴: 삶은 망태버섯

foreach() 형식에서 as 다음에 변수를 하나만 지정하면 해당 변수에는 각 배열 원소의 값이 복사되어 코드 블록 내부에서 사용할 수 있다. 그러나 이 경우에는 코드 블록 내부에서 배열 원소의 키에 접근할 수 없다.

foreach()가 진행되는 동안 현재 배열 원소의 위치를 파악하기 위해서는 코드 블록이 반복될 때마다 값이 증가하는 변수를 별도로 둬야한다.

'PHP' 카테고리의 다른 글

PHP array_key_exists(), in_array(),array_search()  (0) 2021.04.02
배열 원소 순회, for()  (0) 2021.04.02
PHP count() 함수  (0) 2021.04.02
PHP 배열변수에 스칼라값 할당하면  (0) 2021.04.02
PHP 배열 문법 모양  (0) 2021.03.31
댓글