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

时间:2016-01-16 09:33:04

标签: php

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

foreach($coupons as $k=>$c ){

//...
}

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

例如:

第一个循环:0,1

第二个循环:2,3

第三循环:4,5

我该怎么办?

5 个答案:

答案 0 :(得分:3)

将数组拆分为大小为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);

答案 1 :(得分:0)

为什么你不像这样使用for循环:

$length = count($collection);

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

答案 2 :(得分:0)

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

可以这样做但是,它非常强烈,非常气馁,并且可能会在循环中导致意外行为。按照@ Rizier123的建议写一个标准for循环会更好。

假设你真的想这样做,请按照以下方式进行:

在任何循环中,PHP都会保留一个指向iterable的内部指针。你可以改变这个指针。

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);
}

有关详细信息,请look at the docs for the internal array pointer

再次,根据docs for foreach(强调我的):

  

注意:在PHP 5中,当foreach首次开始执行时,内部数组指针会自动重置为第一个元素   阵列。这意味着您不需要在a之前调用reset()   foreach循环。 因为foreach依赖于PHP中的内部数组指针   5,在循环中更改它可能会导致意外行为。 在PHP中   7,foreach不使用内部数组指针。

答案 3 :(得分:0)

这是一种做法:

$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],依此类推。

答案 4 :(得分:0)

我们假设你的数组类似于$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(),您不需要条件语句。