foreach 루프 중에 배열에 동적으로 데이터를 추가합니다. 한번은 프로젝트 작업을 할 때 foreach 중에 배열에 동적으로 데이터를 추가해야 했습니다(여기서 예를 들어보겠습니다)
결과:
어? 이상합니다. 이는 foreach 루프 중에 데이터가 배열에 동적으로 추가될 수 있음을 보여줍니다. $arr의 데이터가 실제로 추가되었지만 foreach 루프에 의해 제거되지 않는 이유는 무엇입니까?
foreach 루프가 실제로 수행하는 작업은 배열 자체가 아니라 배열의 복사본이라는 것을 온라인 검색을 통해 알아냈습니다. 배열 복사본이라면 실행에 따라 배열을 변경하기 전에 만들어진 복사본이어야 합니다. 결과는 알겠습니다
루프는 되긴 하지만 원래 배열은 변경됐지만 복사된 배열(즉, 기존 배열)은 루프를 하기 때문에 새로 추가된 요소에 대해서는 루프를 돌릴 수 없습니다
알겠습니다. 현재
foreach 중에 참조 할당을 사용하면 새로 추가된 데이터가 루프아웃될 수 있습니다.
결과:
그리고 foreach ($arr as & $v){···}, 이 메서드는 값을 복사하는 대신 참조로 값을 할당합니다. $v 및 $arr[$k]는 동일한 메모리 주소를 가리킵니다. 이번에는 foreach 루프가 원래 배열이고, 배열의 포인터도 원래 배열에서 이동되므로 새로 추가된 데이터를 루프아웃할 수 있으며, 값의 변화도 배열의 값에 직접적인 영향을 줍니다. 그 자체
그러면 &, foreach가 원래 배열을 직접 반복할 때부터 나는 어떻습니까?
결과:
&이므로 원래 배열이 직접 동작하는데 왜 unset($v) 이후에는, 원래 배열은 변경되지 않은 상태로 유지됩니까?
foreach($arr as &$v){···}, $v=&$arr[$k]
$arr[$k] 및 $v와 같습니다. 동시에 $arr[$k]의 메모리 주소를 가리킵니다. unset($v)도 메모리 공간에 대한 $v의 참조만 삭제하고 $arr[$k]의 참조는 삭제하지 않습니다. 메모리 주소이므로 $arr [$k]는 여전히 살아 있으므로 $arr는 당연히 변경되지 않고 그대로 유지되므로 다음과 같아야 합니다
결과:
참고할 사항이 하나 더 있습니다: &$k 결과는
결과:
의미: 키를 참조할 수 없으며 해당 구문 형식이 전혀 없습니다
위 내용은 관련 측면을 포함하여 foreach 루프 중에 배열에 데이터를 동적으로 추가하는 방법을 소개합니다. 이 내용이 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.