1

我有一个 foreach,其中有三个不同的数组。我想每三次将值(在运行 foreach 时)放入不同的数组中(查看下面的示例以获得更好的解释)。

Ex: arr = blue, red, green, yellow, brown

arr1 = blue, yellow arr2 = red, brown arr3 = green

我有这段代码(但不起作用,因为模数不会归结为最后一个 if 语句,而不是 if 的第一次执行)。

$count = 0;
foreach($values as $value){
    if($count%2){
        $arrSecond[] = $value[img][url];
    }
    else if($count%3){
        $arrThird[] = $value[img][url];
    }
    else {
        $arrFirst[] = $value[img][url];
    }
    $count++;
}

我该如何解决这个问题?

4

3 回答 3

4

您只需要在不同的偏移量下一直使用模数 3:

foreach($values as $value){
    $mod = $count%3;
    if($mod == 1){
        $arrSecond[] = $value['img']['url'];
    }
    // elseif, not else if!
    elseif($mod == 2){
        $arrThird[] = $value['img']['url'];
    }
    else {
        $arrFirst[] = $value['img']['url'];
    }
    $count++;
}
于 2012-10-15T18:11:35.343 回答
4

或者你可以简单地制作一个数组:

$count = 0;
$data = array();
foreach($source as $value) {
   $data[$count % 3][] = $value[img][url];
   $count++;
}

这为您提供了 3 个子数组,其中 $value 内容在晚上分散开来。

于 2012-10-15T18:13:22.150 回答
1

您可以执行以下操作:

$count = 0;
foreach($values as $value){
    switch($count){
        case 0:
            $arrFirst[] = $value[img][url];
            $count = 1;
            break;
        case 1:
            $arrSecond[] = $value[img][url];
            $count = 2;
            break;
        case 2:
            $arrThird[] = $value[img][url];
            $count = 0;
            break;
    }
}

这基本上是一个三态状态机,它应该比对大量图像使用模数更有效。

于 2012-10-15T18:14:24.413 回答