2013-08-01 2 views
2
foreach($foo as &$bar) { 
    //do something 
} 

이것은 PHP의 foreach 루프 구문입니다. 일반적으로 $foo & $bar은 다른 변수이지만 내 질문은 동일한 변수가 될 수 있습니까? 나는 PHP가 나를 허용 할 것인지 묻는다. 그런 코드를 작성하는 것이 가능한지 아닌지. 이것은 루프 내부의 변수를 수정한다는 것을 알고 있으며 걱정하지 않습니다.

+4

? 'foreach ($ foo as $ foo)'처럼? 실제로 해봤습니까? – Mike

+0

예, 그렇습니다. 제대로 작동하는 것 같습니다. 네가 할 수있을 지 궁금해서. 게다가 PyroCMS를 사용했기 때문에 PyroCMS를 사용했을 수도 있습니다. – trysis

답변

3
그것은, ONCE,하지만 때문에 PHP의 특질의 작동

:

루프가 실제로 원래 $x 배열의 모든 3 개 값을 실행하지만,하는 것으로
php > $x = array(1,2,3); 
php > foreach($x as $x) { echo $x; } 
123 
php > var_dump($x); 
int(3) 

루프가 종료, $x 후, 이제 단순한 int입니다. 더 이상 배열이 아닙니다.

as $x이 일반 일반 $ x 변수 또는 &$x 참조 인 경우에도 마찬가지입니다.

+0

두 번째 $ x가 참조가 아닌 일반 변수 인 경우이 방법을 사용할 수 있습니까? 보통 foreach 루프의 $ bar (예제에서는)가 참조 일 때 루프 뒤 $ foo를 변경하지만 일반 변수 일 때는 그렇지 않습니다. – trysis

+0

은 'as $ x'또는 'as & $ x'를 사용하는 경우 중요하지 않습니다. 결과는 같습니다. 루프가 끝나면 $ x는 원래 배열의 마지막 값이됩니다. –

+0

루프 변수가 다르거 나 같을 때만 작동합니까? 그것은 매우 흥미로운 특질입니다. – trysis

0

아니요, 변수가 같을 수 없습니다. $foo은 배열이고 &$bar은 해당 배열의 요소에 대한 참조가됩니다. 루프의에 대해 이라고하는 이유가 있습니다. 이는 배열의 요소를 루핑하기 때문에 (이 경우 참조를 사용하기 때문에) 직접 수정해야하기 때문입니다.

+1

& $ bar는 배열 요소에 대한 참조가 아니며 배열 자체입니다. 여러분이 이야기하는 "배열의 요소"는 전체 루프가 아닌 루프의 단일 반복입니다. 당신이 무엇을 말할 때 당신이 말하는 것을 알아주십시오. – trysis

+0

@trysis 아니,'& $ bar'는'foreach ($ foo as & $ foo) {...}'를하지 않는 한 배열 자체가 아닙니다. – federicot

+0

& $ bar는 배열이 아니고 배열이 될 수 있습니까? 너는 자신을 모순된다. – trysis

2

예, 작동합니다. foreach 루프가 시작되면 배열 내용의 스냅 샷을 만듭니다. 그런 다음 반복 변수가 해당 스냅 샷의 요소에 연속적으로 지정됩니다.

$foo = array(1, 2, 3); 
foreach ($foo as &$foo) { 
    echo "foreach: $foo\n"; 
} 
echo "vardump: "; 
var_dump($foo); 

출력 : 당신은 "같은 변수 인"무엇을 의미합니까

foreach: 1 
foreach: 2 
foreach: 3 
vardump: int(3)