Vous pouvez utiliser le CachingIterator à cette fin.
Voici un exemple:
$collection = new CachingIterator(
new ArrayIterator(
array('Cat', 'Dog', 'Elephant', 'Tiger', 'Shark')));
Le CachingIterator est toujours un temps de retard sur l'intérieure de la itérateur:
var_dump( $collection->current() ); // null
var_dump( $collection->getInnerIterator()->current() ); // Cat
Ainsi, lorsque vous effectuez foreach
sur $collection
, l'élément courant de l'intérieur de la ArrayIterator sera le prochain élément déjà, vous permettant d'œil sur elle:
foreach($collection as $animal) {
echo "Current: $animal";
if($collection->hasNext()) {
echo " - Next:" . $collection->getInnerIterator()->current();
}
echo PHP_EOL;
}
Sortie:
Current: Cat - Next:Dog
Current: Dog - Next:Elephant
Current: Elephant - Next:Tiger
Current: Tiger - Next:Shark
Current: Shark
Pour une raison que je ne peux expliquer, le CachingIterator va toujours essayer de convertir le courant de l'élément de la chaîne. Si vous souhaitez effectuer une itération sur une collection d'objets et ont besoin d'accéder aux propriétés et méthodes, pass CachingIterator::TOSTRING_USE_CURRENT
tant que le deuxième paramètre du constructeur.
Sur une note, le CachingIterator arrive c'est le nom de la possibilité de mettre en cache tous les résultats qu'il a itéré jusqu'à présent. Pour que cela fonctionne, vous devez instancier il avec CachingIterator::FULL_CACHE
, puis vous pouvez récupérer les résultats mis en cache avec getCache()
.