foreach가 &를 사용하여 배열 arr2를 순회한 후, 얻은 결과는 매우 혼란스럽습니다. & 순회 포인터가 어떻게 이동하는지 설명할 수 있는 전문가가 있는지 궁금합니다.
코드는 다음과 같습니다.
결과:
0 a
1 s
2 d
0 a a
1 s a
2 s a
두 번째 순회 중에 포인터가 s로 이동했을 때 포인터가 멈춘 이유는 무엇입니까?
我想大声告诉你2017-07-04 13:47:55
이유:
첫 번째
foreach
中采取了引用传递的方式,第一次循环$v
指向$arr2[0]
的存储空间,第二次指向>$arr2[1]
的存储空间,循环结束则指向$arr2[2]
저장 공간에두 번째
foreach
中采取了值传递的方式,第一次循环给$v
赋值了a
,即给$arr2[2]
赋值了a
,第二次同上,$arr2[2]
的值变为了$arr2[1]
的值,则$arr2
变成了[a,s,s]
에서는 배열의 마지막 요소가 두 번째 요소의 값이 됩니다
해결책:
처음에는
foreach
结束后加一句unset($v)
;두 번째
foreach
循环不用$v
변수를 다른 이름으로 변경하세요
참조:
PHP에서 배열 값을 변경하기 위해 foreach를 사용할 때의 문제
php 배열 클래스 객체 값 전달 참조 전달 차이