foreach $value 앞에 &를 추가하면 array 단위를 수정하기 쉽습니다. foreach에서 reference를 사용할 때 주의하세요. 처리 후 즉시 참조 관계를 끊어서 나중에 위와 같은 상황이 발생하지 않도록 할 수도 있습니다.
foreach($arr as $value){ $value .= '4'; }
그런데 이 사용법도 오류가 발생하기 쉽고, 찾기도 쉽지 않습니다.
예제를 보면 더 간단합니다.
<?php $arr = array('a','b','c'); $arr2 = array('d', 'e', 'f'); foreach($arr as $value){//习惯用$value或$val $value .= '4'; } //都处理完毕我们在页面模版输出,首先输出$arr2 foreach($arr2 as $value){//习惯用$value或$val //echo $value; } //然后再这样输出 $arr; foreach($arr as $value){//习惯用$value或$val echo $value, "\n"; } ?>
출력 결과가 예상과 같은지 확인해 보겠습니다. 결과는 다음과 같습니다.
a4
b4
b4
예상했던 결과와 다릅니다. 인용으로 인한 문제입니다.
foreach($arr as &$value)가 배열을 끝까지 순회할 때 참조 관계가 깨지지 않습니다. 이는 $value 및 $arr의 마지막 단위인 $arr[2]에 대한 참조와 동일합니다.
foreach($arr2 as $value)로 가면 $value의 값은 항상 배열 단위의 값으로 변경되므로 참조 관계가 깨지지 않으므로 $arr[2]의 값도 그에 따라 변경됩니다. $arr2가 탐색될 때까지 $value의 값은 f이므로 $arr[2]의 값도 f입니다.
이때 $arr의 값은 다음과 같아야 합니다.
Array ( [0] => a4 [1] => b4 [2] => f )
이는 우리가 보는 최종 출력 결과와 다릅니다. 그런 다음 foreach($arr as $value)로 이동합니다. 마찬가지로 $arr[2]의 값도 $value로 변경됩니다. 즉, $arr[1], $arr[2 ] 값은 $arr[1]의 값, 즉 b4가 됩니다. 그런 다음 키가 2일 때 $arr[2]의 값은 $arr[2]의 값, 즉 b4가 됩니다. 출력한 결과입니다.
따라서 foreach에서 참조를 사용할 때는 주의하세요. 처리 후 즉시 참조 관계를 끊어서 나중에 위와 같은 상황이 발생하지 않도록 할 수도 있습니다.
foreach($arr as $value){ $value .= '4'; } unset($value);
위 내용은 &(및 연산자)를 사용하는 foreach 루프 관련 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!