我需要循环和对象数组。在某些情况下,在循环内部,我需要将内部指针移动到数组中的下一个元素。我该怎么做?
foreach($objects as $object)
{
// TODO: move internal pointer to next one?
// next($objects) doesn't work
}
答案 0 :(得分:9)
您无法移动数组指针,但可以skip the iteration:
foreach ($objects as $object) {
if (!interesting($object)) {
continue;
}
// business as usual
}
如果您需要决定是否跳过 next 迭代,可以执行以下操作:
$skip = false;
foreach ($objects as $object) {
if ($skip) {
$skip = false;
continue;
}
// business as usual
if (/* something or other */) {
$skip = true;
}
}
我首先要检查是否有更好的逻辑来表达你想要的东西。如果没有,@netcoder's list each
example是更简洁的方式。
答案 1 :(得分:5)
如前所述,您可以使用for
循环(仅当您有数字键时)或continue
。另一种方法是使用list
和each
迭代方法,它允许您使用next
,prev
等移动数组指针(因为它不会创建副本)像foreach
那样的数组:
$array = array(1,2,3,4,5);
while (list($key, $value) = each($array)) {
echo $value;
next($array);
}
将输出:
024
答案 2 :(得分:0)
next - 推进数组的内部数组指针
答案 3 :(得分:0)
现在,我理解,你想要什么;),另外两个解决方案
$c = count($array);
for ($i = 0; $i < $c; $i += 2) {
$item = $array[$i];
}
foreach (range(0, count($array), 2) as $i) {
$item = $array[$i];
}
答案 4 :(得分:0)
使用for循环,如下所示:
for($i = 0; $i < sizeof($array); $i++)
{
echo $array[$i]->objectParameter;
$i++; //move internal pointer
echo $array[$i]->objectParameter;
$i++; //move internal pointer again
echo $array[$i]->objectParameter;
//$i++; //no need for this because for loop does that
}