我有一个foreach
循环,如下面的代码:
foreach($coupons as $k=>$c ){
//...
}
现在,我想在每个循环中获取两个值。
例如:
第一个循环:0,1
第二个循环:2,3
第三循环:4,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()
,您不需要条件语句。