foreach 수정
1. foreach() 루프는 더 이상 배열 내부 포인터에서 작동하지 않습니다.
$array = [0, 1, 2]; foreach ($array as &$val) { var_dump(current($array)); }PHP7은 결과적으로 int(0)을 세 번 인쇄합니다. 이는 배열의 내부 포인터가 변경되지 않았음을 의미합니다.
이전 실행의 결과는 int(1), int(2) 및 bool(false)를 인쇄합니다.
2. 값에 따라 반복할 때 foreach는 array# 🎜🎜#
foreach가 값(값 기준)으로 루프하는 경우 foreach는 배열 복사본에서 작동합니다. 이러한 방식으로 루프 중에 배열을 수정해도 루프 동작에 영향을 주지 않습니다.
$array = [0, 1, 2]; $ref =& $array; // Necessary to trigger the old behavior foreach ($array as $val) { var_dump($val); unset($array[1]); }위의 코드가 루프에서 배열의 두 번째 요소를 설정 해제하더라도 PHP7은 여전히 세 가지 요소를 인쇄합니다: (0 1 2)
이전 버전의 PHP는 1 Skip만 인쇄하고 print (0 2).3. 참조에 따라 반복할 때 배열을 수정하면 루프에 영향을 미칩니다. 루프할 때 참조를 사용하는 경우 배열을 수정하면 루프 동작에 영향을 미칩니다. 그러나 PHP7 버전은 다양한 시나리오에서 위치 유지 관리를 최적화합니다. 예를 들어, 반복하는 동안 배열에 요소를 추가합니다.
$array = [0]; foreach ($array as &$val) { var_dump($val); $array[1] = 1; }위 코드에 추가된 요소도 루프에 참여하므로 PHP7은 "int(0) int(1)"를 인쇄하고 이전 버전에서는 "int(0)만 인쇄합니다. ". 4. 단순 객체에 대한 반복(탐색 불가능).