출처 : http://naiyumie.tistory.com/entry/%EB%B0%B0%EC%97%B4-Array-PHP%EC%9D%98-%EB%B0%B0%EC%97%B4%EC%9D%84-Foreach%EB%A1%9C-%EA%B0%80%EC%A7%80%EA%B3%A0-%EB%86%80%EC%9E%90


foreach의 함수원형은 아래와 같습니다.

foreach (배열변수 as 키변수) statement
foreach (배열변수 as 키변수 => 값변수) statement

첫시간에 보셧던 1차원배열과 2차원배열의 원리가 생각나시나요?

여기서 배웟던 2차원 배열을 가지고 지금부터 Foreach로 배열(array)을 가지고 놀아봅니다~ ^^

우선 저번에 보았던 2차원 배열의 마지막 배열을 가지고 풀어봅니다.

<?

$arr = array(

               "1반" => array("반장"=>"철수", "부반장"=>"영수", "회장"=>"미애", "부회장"=>"동현"),
               "2반" => array("반장"=>"지성", "부반장"=>"동원", "회장"=>"원빈", "부회장"=>"장문"),
               "3반" => array("반장"=>"효리", "부반장"=>"지원", "회장"=>"호동", "부회장"=>"유미")

);

?>

첫시간에는 이것을 print_r로 표현을 했엇죠? ^^ 이제는 조금더 쉽게 다루어 봅니다.

foreach는 말그대로 배열의 변수와 배열안에 있는 키값을 가지고 좀더 쉽게 배열에서 원하는 값을 찾을

때 사용합니다.

아래의 간단한 예로 우선 접해볼까요~ ^^

<?

foreach($arr as $value){
echo $value['반장']." / ".$value['부반장']." / ".$value['회장']." / ".$value['부회장']."<br />";
}

?>

결과값은 저번시간에 보았던 결과 와 같이

철수 / 영수 / 미애 / 동현
지성 / 동원 / 원빈 / 장문
효리 / 지원 / 호동 / 유미

로 나오겠습니다.

어떤가요? 아직 이해를 못하셧다 하더라도 확실히 소스가 줄어들었지요? ^^

<? // 저번시간꺼

print_r (
$arr['1반']['반장']." / ".$arr['1반']['부반장']." / ".$arr['1반']['회장']." / ".$arr['1반']['부회장']."<br />".
$arr['2반']['반장']." / ".$arr['2반']['부반장']." / ".$arr['2반']['회장']." / ".$arr['2반']['부회장']."<br />".
$arr['3반']['반장']." / ".$arr['3반']['부반장']." / ".$arr['3반']['회장']." / ".$arr['3반']['부회장']
           );
          
?>

          
위는 저번시간의 배열풀기 입니다. 오호호~ 저긴걸 단숨에 줄였습니다!!!

foreach는 주어진 배열의 키값만큼 루프를 돈다고 생각하시면됩니다.

while이나 for처럼 루프를 도는것이지요.

소스를 잠깐 풀어보자면 이렇게 됩니다.

<?

$arr = array(

                   "1반" => array("반장"=>"철수", "부반장"=>"영수", "회장"=>"미애", "부회장"=>"동현"),
                   "2반" => array("반장"=>"지성", "부반장"=>"동원", "회장"=>"원빈", "부회장"=>"장문"),
                   "3반" => array("반장"=>"효리", "부반장"=>"지원", "회장"=>"호동", "부회장"=>"유미")

);

foreach($arr as $value){
echo $value['반장']." / ".$value['부반장']." / ".$value['회장']." / ".$value['부회장']."<br />";
}

?>

색갈별로 해당 함수입니다.

$arr 전체 배열 안에서 $value안에서 ['X']를 만족하는 값을 찾는것이지요.

이떄 $value에는 1반, 2반, 3반의 array()들이 자동으로 대입이 됩니다.

이해가 잘안되시죠? 당연한겁니다. ;; 저두 예전에 애좀 먹었죠..

$arr(배열)에 $value(값)을 읽어오는것입니다.

foreach는 우리가 생각하듯이 1차원배열 2차원배열을 생각해주지 않습니다.

우리 사용자들이 사용하는언어인 거죠 1차원배열과 2차원배열의 뜻은요.

 

foreach에게는 그저 $arr는 배열일 뿐입니다. 그렇기 때문에 그 배열의 값을

불러오는 형식입니다. 잘 이해가 안되셨더라도 아래로 진행하시기 바랍니다.

 

<?

$arr = array(

                   "1반" => array("반장"=>"철수", "부반장"=>"영수", "회장"=>"미애", "부회장"=>"동현"),
                   "2반" => array("반장"=>"지성", "부반장"=>"동원", "회장"=>"원빈", "부회장"=>"장문"),
                   "3반" => array("반장"=>"효리", "부반장"=>"지원", "회장"=>"호동", "부회장"=>"유미")

);

 

foreach($arr as $value){
echo $value."<br />";
}

?>

Array
Array
Array

이런 결과값이 나오지요?

무슨 뜻일까요? 이해가 좀되시나요? 각 배열의 키값인 1반, 2반, 3반은 무시당했지요?

$arr(배열)의 $value(값)을 달라 요청하였기때문에

배열의 1반의 값 array("반장"=>"철수", "부반장"=>"영수", "회장"=>"미애", "부회장"=>"동현")
배열의 2반의 값 array("반장"=>"지성", "부반장"=>"동원", "회장"=>"원빈", "부회장"=>"장문")
배열의 3반의 값 array("반장"=>"효리", "부반장"=>"지원", "회장"=>"호동", "부회장"=>"유미")

이렇게 출력해준것입니다.

좀더쉽게 볼자면.

$arr(배열)

$value(array("반장"=>"철수", "부반장"=>"영수", "회장"=>"미애", "부회장"=>"동현"))

을 달라 요청하였 기때문에 $value의 값을 출력해 주는것입니다.

하지만 $value에 정의된 값은 배열이기 때문에 Array(배열)이 출력되는것이지요.

좀더 쉬워지는 예로 가봅니다. 이해가 안되더라도 배울수록 쉬워집니다. 모두 진행되고 그다음에 처음부터

보시는게 공부에 더 도움이 되시니까 진도를 나가시기 바랍니다.

아래 예제를 보세요.

<?

foreach($arr as $key => $value){
echo $key." => ".$value."<br />";
}

?>

출력은 다음과 같습니다.

1반 => Array

2반 => Array

3반 => Array

이제 완벽하게 이해가 가시나요?

배열에서 키값=> 을 정의해주었던것과 같이 위 foreach에서 키값을 정의해 불러달라고 요청한것이지요.

그럼으로써 배열의 키값을 불러옵니다.

하지만 $value(값)은 여전히 배열이기 때문에 array(배열)을 반환합니다.

배열이 변수에 정의되있기 때문인거죠.

참고 예로 아래처럼 하면 각배열(1반,2반,3반)의 값인 배열(반장,부반장,회장,부회장) 중 원하는 반장을

추출할수 있겠습니다 ^^.

<?

foreach($arr as $key => $value){
echo $key." => ".$value['반장']."<br />";
}

?>

 

여기까지 이해 되셨다면 아래 예를 마지막으로 보겠습니다.

위까지 이해가 안되셨다면 다시한번 읽어보시기 바랍니다.

아래 foreach를 이해하기 힘드실꺼라 생각됩니다.

아래는 2차원 배열을 푸는 foreach의 응용입니다.

 

<?

$arr = array(

                   "1반" => array("반장"=>"철수", "부반장"=>"영수", "회장"=>"미애", "부회장"=>"동현"),
                   "2반" => array("반장"=>"지성", "부반장"=>"동원", "회장"=>"원빈", "부회장"=>"장문"),
                   "3반" => array("반장"=>"효리", "부반장"=>"지원", "회장"=>"호동", "부회장"=>"유미")

);

 

foreach($arr as $key => $value){
    foreach($value as $keys => $values){
    echo $key." / ".$keys." / ".$values."<br />";
    }
}

?>

 

좀더 이해하시기 쉽게 하기위해 배열정의와 함께 썻습니다.

각 해당 색상이 각 해당값을 나타냅니다.

출력은 아래와 같습니다.

1반 / 반장 / 철수
1반 / 부반장 / 영수
1반 / 회장 / 미애
1반 / 부회장 / 동현
2반 / 반장 / 지성
2반 / 부반장 / 동원
2반 / 회장 / 원빈
2반 / 부회장 / 장문
3반 / 반장 / 효리
3반 / 부반장 / 지원
3반 / 회장 / 호동
3반 / 부회장 / 유미

 

이로써 foreach를 맘대로 가지고 노실수 있게되었습니다. ^^ 축하드립니다.