gpt4 book ai didi

php - 在 PHP 中迭代数组时向前看

转载 作者:IT王子 更新时间:2023-10-29 01:13:02 24 4
gpt4 key购买 nike

在 PHP 5.2 中迭代数组时是否可以“先行查看”?例如,我经常使用 foreach 来操作数组中的数据:

foreach($array as $object) {
// do something
}

但我经常需要在遍历数组时查看下一个元素。我知道我可以使用 for 循环并通过它的索引 ($array[$i+1]) 引用下一项,但它不适用于关联数组.我的问题是否有任何优雅的解决方案,可能涉及 SPL?

最佳答案

您可以使用 CachingIterator为此目的。

这是一个例子:

$collection = new CachingIterator(
new ArrayIterator(
array('Cat', 'Dog', 'Elephant', 'Tiger', 'Shark')));

CachingIterator 总是比内部迭代器落后一步:

var_dump( $collection->current() ); // null
var_dump( $collection->getInnerIterator()->current() ); // Cat

因此,当您对 $collection 执行 foreach 时,内部 ArrayIterator 的当前元素将已经是下一个元素,让您可以窥视它:

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 将始终尝试将当前元素转换为字符串。如果您想遍历对象集合并需要访问属性和方法,请将 CachingIterator::TOSTRING_USE_CURRENT 作为第二个参数传递给构造函数。


顺便说一句,CachingIterator 之所以得名,是因为它能够缓存它迄今为止迭代过的所有结果。为此,您必须使用 CachingIterator::FULL_CACHE 对其进行实例化,然后您可以使用 getCache() 获取缓存的结果。

关于php - 在 PHP 中迭代数组时向前看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com