2010-04-28 4 views
3

간단한 PHP 페이지를 작성했고 약간의 foreach 루프가 사용되었습니다.PHP의 'foreach'루프에서 값이 재설정되었는지 확인하는 방법은 무엇입니까?

다음은 스크립트입니다 :

$arrs = array("a", "b", "c"); 

foreach ($arrs as $arr) { 
    if(substr($arr,0,1)=="b") { 
     echo "This is b"; 
    }  
} // End of first 'foreach' loop, and I didn't use 'ifelse' here. 

그리고이 foreach 끝, 나는 foreach 루프의 모든 값이 이전 foreach에서와 동일있는 다른 foreach 루프를 쓸 때.

foreach ($arrs as $arr) { 
    if(substr($arr,0,1)=="c") { 
     echo "This is c"; 
    }  
} 

나는 같은 값 및 키 두 foreach 루프를 가지고하는 것이 좋습니다 확실하지 않다.

첫 번째 foreach 루프에서 값을 덮어 쓰시겠습니까?

+2

코드 들여 쓰기가 끔찍합니다. 더 읽기 쉽게 만들어주세요. –

+0

들여 쓰기 코드를 변경했습니다. –

답변

5

예를 들어, 당신은 참조를 사용하기 시작하고 당신이 이상한 행동을 얻을 수있을 때까지 괜찮아요 :

<?php 
$array = array(1,2,3,4); 
//notice reference & 
foreach ($array as & $item) { } 

$array2 = array(10, 11, 12, 13); 
foreach ($array2 as $item) { } 

print_r($array); 

출력 내용 :

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 13 
) 

첫 번째 foreach가 에 대한 참조로서, $array[3]을 각각의 값으로 $array2으로 순차적으로 설정한다.

는이 참조를 제거합니다 첫 번째 foreach, 후 unset($item)을하고있을 해결할 수 있지만, 당신이 foreach 문에 참조를 사용하지 않는 한이, 귀하의 경우에 실제로 문제가되지 않습니다. documentation of foreach에서

1

배열에 글을 쓰지 않고 배열을 읽고 인쇄 만하기 때문에 배열의 값이 변경되지 않습니다.

당신은 두 번 배열을 통해 반복 시간을 절약 할 수 있지만이 작업을 수행하여

$arrs = array("a", "b", "c"); 

foreach ($arrs as $arr) { 
    if(substr($arr,0,1)=="b") { 
     echo "This is b"; 
    } 
    if(substr($arr,0,1)=="c") { 
     echo "This is c"; 
    } 
} 
4

두 주목할 사항 :

참고 : 제 foreach을 실행하기 시작하면 내부 배열 포인터 자동 어레이의 첫 번째 요소 재설정된다. 즉, foreach 루프 전에 reset()에 전화 할 필요가 없습니다.

참고 어레이가 참조하지 않는 foreach가 지정된 배열 복사 아닌 배열 자체 을 동작한다. foreach에는 배열 포인터에 몇 가지 부작용이 있습니다. foreach 도중 또는 그 이후에 배열 포인터를 사용하지 말고을 재설정하지 마십시오.

1

1 개의 foreach 루프가 필요합니다.

또는 존이 말에 더 짧은 방법이 있습니다 : 이미 foreach 루프를 사용하고 있기 때문에

$arrs = array("a", "b", "c"); 

foreach ($arrs as $arr) 
    if ($arr != "a") 
     echo 'This is ' . $arr; 

이, SUBSTR을 사용하는 것보다 훨씬 쉽고 빠르다. 그리고 많은 양의 if 문으로 그것을 오염시키지 않으려 고합니다. 자신이 이것을 발견하면 switch 문을 사용하는 것이 훨씬 빠릅니다.

건배 :)

관련 문제