그래서이 문제를 파악하기 위해 가능한 한 코드를 최소화하면서 2 시간을 보냈지만 문제를 파악할 수는 없었습니다.왜 PHP는 배열 포인터를 계속 재설정합니까?
$arr['key']['name'] = array("one", "two", "three");
$counter = 0;
do
{
$cur = current($arr);
$k = key($arr['key']['name']);
next($arr['key']['name']);
}while($k !== null);
이 끝없는 루프는 다음과 같습니다
그래서 나는이 코드가 있습니다. 어떤 이유로 든 $ arr [ 'key'] [ 'name'] 값을 모두 거친 후에 NULL을 반환하는 대신 key()가 다시 0으로 돌아갑니다. $ cur = current ($ arr); 그러나 그 문제를 해결합니다. According to php manual, current()
은 배열 포인터에 전혀 영향을주지 않습니다. 이제 배열을 복사하면 포인터가 재설정되지만 계속 복사가 진행되지 않으며 $ k가 0에서 2로 이동하지 않고 0으로 돌아가는 대신 0으로 다시 설정 한 다음 다시 0으로 다시 설정한다는 것을 알고 있습니다.
당신이'next ($ arr [ 'key'] [ 'name'])를하고 있다면'$ cur = current ($ arr [ 'key'] [ 'name']); '. – nickb
왜냐하면 $ arr [ 'key'] 인 $ arr의 현재 요소 대신 $ arr [ 'key'] [ 'name']의 현재 요소를 얻을 것이기 때문입니다. – John
이것은 문서화되지 않은/버그 . 나는 "$ cur = current ($ arr);"를 다시 썼다. "현재 ($ arr);" 루프가 끝났어. 또는 "$ arr [ 'key'] [ 'name']"을 "$ arr [ 'name']"로 바꿨고 루프가 모두 끝났습니다. –