如何重置PHP中的foreach循环中的计数?

时间:2014-11-26 19:19:52

标签: php arrays foreach

查看我的示例,我要做的是确保没有null结果

基本上,foreach $ array,如果$ xxx [$ key]为null,从头开始重新启动赋值

下面,我正在硬编码$ k,$ v和$ y,但我不知道$array有多大,所以我不能永远这样循环。

任何想法如何简化这个?如果foreach$array上并且不用于循环

,那就太好了
$xxx = ['a','b'];
$array = [1,2,3,4,5,6,7,8,9];
$k = 0;
$v = 0;
$y = 0;
foreach($array as $key =>  $val){
    if(isset($xxx[$key])){
        var_dump($xxx[$key]);
    } else {
        if(isset($xxx[$k])){
            var_dump($xxx[$k]);
        } else {
            if(isset($xxx[$v])){
                var_dump($xxx[$v]);
            } else {
                var_dump($xxx[$y]);
                $y++;
            }
            $v++;
        }
        $k++;
    }
}

结果:

string 'a' (length=1)
string 'b' (length=1)
string 'a' (length=1)
string 'b' (length=1)
string 'a' (length=1)
string 'b' (length=1)
string 'a' (length=1)
string 'b' (length=1)
null

2 个答案:

答案 0 :(得分:1)

使用mod运算符,无论$ array或$ xxx的大小如何,它都会无限期地继续运行。

$xxx = ['a','b','c','d'];
$array = [1,2,3,4,5,6,7,8,9];

foreach ($array as $key => $value) {
    var_dump($xxx[$key % count($xxx)]);
}
打印出来:

string(1) "a" 
string(1) "b" 
string(1) "c" 
string(1) "d" 
string(1) "a" 
string(1) "b" 
string(1) "c" 
string(1) "d" 
string(1) "a"

答案 1 :(得分:0)

汇总你自己的函数以检查项目值是否为null然后传递或设置其值作为回调函数传递给array_map()array_walk()以检查值,所以你得到回调:

array_walk($data, function(&$item, $key) {

  if ( $item === null ) {
    $item = something;
    // or do something else
  }
});