2012-10-03 4 views
2

내 코드의 배열이 너무 커서 붙여 넣기에 붙여 넣습니다. 내가 무한 루프이 스크립트의무한 루프로 끝나는 ArrayIterator를 반복 처리하는 이유는 무엇입니까?

논리를 얻고 왜 이해가 안 http://pastebin.com/6tviT2Xj

은 다음과 같습니다

$it = new ArrayIterator($options); 
while($it->valid()) { 
    print $it->key(); 
    print $it->current(); 
} 
+3

'forea ch'는 반복자를 사용할 때 PHP3처럼 보입니다 ...;) – Sven

+0

그래,하지만 다음 요소에 대해서 알아야 해. – drupality

+0

어쨌든 나는 다음에 대해 잊어하는 수치 스럽다. P – drupality

답변

6

당신이 (with ArrayIterator::next()를) 반복자 당신이 이동하지 않을 때문입니다.

while ($it->valid()) { 
    ... 
    $it->next(); 
} 
+0

그냥 Curios ..이 코드를 테스트 했습니까 ??? .. 당신이했다면 에러가 있다는 것을 알고있을 것입니다. – Baba

+0

@Baba - 아니요,'$ it-> next()'를 추가했습니다 - 그게 문제의 원인입니다. 어떤 오류가 있습니까? –

+0

코드를 올바른 형식으로 편집했습니다. diffend를 볼 수 있습니다 – Baba

3

당신이 $it->next(); 다른 사용해야 당신은 주요 문제는 당신 만의 $it->next();를 사용하지 않는 영원히

1

동일한 키를 통해 cicle 것이다 여전히 print $it->current();를 실행하는 경우 때문에 당신이 원하는 출력을 제공하지 많은는 것 배열 정보를 print과 함께 출력 할 수 없으므로 Array 만 반환하십시오. 당신이 다차원 배열을 처리되기 때문에

당신은 RecursiveArrayIteratorRecursiveIteratorIterator를 사용한다

얻을 모든 값을 시도 : http://codepad.viper-7.com/UqF18q

+0

@Downvoter는 설명을 줄 수 있습니까 ??? ??? – Baba

2

당신이 현재 반복하고 있습니다 :

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($options)); 
foreach ($it as $key => $val) { 
    echo $key . ":" . $val . "\n"; 
} 

전체 데모를 참조하십시오 요소를 가리 키기 위해서는 $it->next();을 사용해야합니다.

관련 문제