>  기사  >  백엔드 개발  >  &(및 연산자)를 사용하는 foreach 루프 관련 문제

&(및 연산자)를 사용하는 foreach 루프 관련 문제

伊谢尔伦
伊谢尔伦원래의
2017-06-23 15:05:551877검색

foreach $value 앞에 &를 추가하면 array 단위를 수정하기 쉽습니다. foreach에서 reference를 사용할 때 주의하세요. 처리 후 즉시 참조 관계를 끊어서 나중에 위와 같은 상황이 발생하지 않도록 할 수도 있습니다.

foreach($arr as $value){ 
$value .= '4'; 
}

그런데 이 사용법도 오류가 발생하기 쉽고, 찾기도 쉽지 않습니다.
예제를 보면 더 간단합니다.

<?php 
$arr = array(&#39;a&#39;,&#39;b&#39;,&#39;c&#39;); 
$arr2 = array(&#39;d&#39;, &#39;e&#39;, &#39;f&#39;); 

foreach($arr as $value){//习惯用$value或$val 
$value .= &#39;4&#39;; 
} 

//都处理完毕我们在页面模版输出,首先输出$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 .= &#39;4&#39;; 
} 
unset($value);


위 내용은 &(및 연산자)를 사용하는 foreach 루프 관련 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.