문제
그것은"와"앞으로는 동안 반복 배 PHP5.2?예를 들어,자주 사용 foreach 를 조작하는 데이터 배열에서:
foreach($array as $object) {
// do something
}
그러나 나이 종종 필요에 다음 요소를 통과하는 동안에 배열입니다.나는 알고를 사용할 수 있었다. for
루프 및 참조 다음 항목이 그것에 의하여 인덱스($array[$i+1]
어),하지만 그것은 작동하지 않을 것에 대한 연관 배열입니다.가 우아한 솔루션을 제 문제에 대한 아마도 포함하는 SPL?
해결책
당신은 사용할 수 있습니다 캐싱 레터 레이터 이 목적을 위해.
예는 다음과 같습니다.
$collection = new CachingIterator(
new ArrayIterator(
array('Cat', 'Dog', 'Elephant', 'Tiger', 'Shark')));
캐싱 레터 레이터는 항상 내부 반복자 뒤에있는 한 단계입니다.
var_dump( $collection->current() ); // null
var_dump( $collection->getInnerIterator()->current() ); // Cat
따라서 할 때 foreach
~ 위에 $collection
, 내부 배열 계수의 현재 요소는 이미 다음 요소가되므로 다음을 살펴볼 수 있습니다.
foreach($collection as $animal) {
echo "Current: $animal";
if($collection->hasNext()) {
echo " - Next:" . $collection->getInnerIterator()->current();
}
echo PHP_EOL;
}
출력 :
Current: Cat - Next:Dog
Current: Dog - Next:Elephant
Current: Elephant - Next:Tiger
Current: Tiger - Next:Shark
Current: Shark
어떤 이유로 설명 할 수없는 이유로, 캐싱 레터 레이터는 항상 현재 요소를 문자열로 변환하려고 시도합니다. 객체 컬렉션을 반복하고 속성에 액세스 해야하는 경우 방법을 통과하십시오. CachingIterator::TOSTRING_USE_CURRENT
생성자의 두 번째 매개 변수로서.
사이드 노트에서 캐싱 레터 레이터는 지금까지 반복 한 모든 결과를 캐시하는 기능에서 이름을 얻습니다. 이것이 작동하기 위해서는 그것을 인스턴스화해야합니다. CachingIterator::FULL_CACHE
그런 다음 캐시 된 결과를 가져올 수 있습니다 getCache()
.
다른 팁
사용 array_keys
.
$keys = array_keys($array);
for ($i = 0; $i < count($keys); $i++) {
$cur = $array[$keys[$i]];
$next = $array[$keys[$i+1]];
}
나는 이것이 오래된 게시물이라는 것을 알고 있지만, 현재/다음/이전/이전을 더 잘 설명 할 수 있습니다. 예시:
$array = array(1,2,3,2,5);
foreach($array as $k => $v) {
// in foreach when looping the key() and current()
// is already pointing to the next record
// And now we can print current
print 'current key: '.$k.' and value: '.$v;
// if we have next we can print its information too (key+value)
if(current($array)) {
print ' - next key: '.key($array).' and value: '.current($array);
// at the end we must move pointer to next
next($array);
}
print '<br>';
}
// prints:
// current key: 0 and value: 1 - next key: 1 and value: 2
// current key: 1 and value: 2 - next key: 2 and value: 3
// current key: 2 and value: 3 - next key: 3 and value: 2
// current key: 3 and value: 2 - next key: 4 and value: 5
// current key: 4 and value: 5
나는 사용할 수 있습에 대한 반복과를 참조하여 다음 항목의 색인($array[$i+1])지만,그것은 작동하지 않을 것에 대한 연관 배열입니다.
로 변환하는 것이 좋 연관 배열로 인덱스 순차적으로 하나 array_values(), 를 사용할 수 있도록,단순 루프를 위한 솔루션입니다.