如何在 foreach 循环中获取下一个值


how to fetch next value in foreach loop

我有一个foreach循环,如下所示的代码:

foreach($coupons as $k=>$c ){
//...
}

现在,我想在每个循环中获取两个值。

例如:

第一圈:0,1

第二圈:2,3

第三圈:4,5

我该怎么办?

将数组拆分为大小为 2 的块:

$chunks = array_chunk($coupons, 2);
foreach ($chunks as $chunk) {
    if (2 == sizeof($chunk)) {
        echo $chunk[0] . ',' . $chunk[1];
    } else {
        // if last chunk contains one element
        echo $chunk[0];
    }
}

如果要保留键 - 使用第三个参数作为true

 $chunks = array_chunk($coupons, 2, true);
 print_r($chunks);
为什么

你不使用这样的for循环:

$length = count($collection);
for($i = 0; $i < $length ; i+=2)
{
    // Do something
}

首先,我假设你没有使用 PHP 7。

但是,可以这样做,这是

高度,非常不鼓励的,并且可能会导致循环中的意外行为。按照@Rizier123的建议编写一个标准的for循环会更好。

假设你真的想这样做,方法如下:

在任何循环中,PHP 都会保留一个指向可迭代对象的内部指针。您可以更改此指针。

foreach($coupons as $k=>$c ){
  // $k represents the current element
  next($coupons); // move the internal array pointer by 1 space
  $nextK = current($coupons);
  prev($coupons);
}

有关更多详细信息,请查看内部数组指针的文档。

同样,根据foreach的文档(强调我的):

注意:在 PHP 5 中,当 foreach 第一次开始执行时,内部数组指针会自动重置为 数组。这意味着您不需要在 foreach 循环。As foreach 依赖于 PHP 中的内部数组指针 5、在循环内更改它可能会导致意外行为。在 PHP 中 7、foreach 不使用内部数组指针。

假设你的数组如下所示$a

$a = [
    "a"=>1,
    "b"=>2,
    "c"=>3,
    "d"=>4,
    "e"=>5,
    "f"=>6,
    "g"=>7,
    "h"=>8,
    "i"=>9
];
$b = array_chunk($a,2,true);
foreach ($b as $key=>$value) {
    echo implode(',',$value) . '<br>';
}

首先,我们将数组拆分为块(保留键的参数true),然后执行foreach循环。由于使用了 implode() ,您不需要条件语句。

好吧,

这将是1种方法:

$keys=array_keys($coupons);
for($i=0;$i<count($keys);++$i){ 
$current=$coupons[$keys[$i]];
$next=(isset($keys[$i+1])?$coupons[$keys[$i+1]]:NULL);
}

现在,当前值在 $current 中,下一个值在 $next 中,当前键在 $keys[$i] 中,下一个键在 $keys[$i+1] 中,依此类推。