1

3 つの異なる配列を持つ foreach があります。foreach を実行するときに、値を 3 回ごとに異なる配列に入れたいと思います (より良い説明については、以下の例を参照してください)。

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

または、単純に単一の配列を作成することもできます:

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

これにより、3 つのサブ配列が得られ、$value の要素がその中に分散されます。

于 2012-10-15T18:13:22.150 に答える
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 に答える
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;
    }
}

これは基本的に 3 ステート ステート マシンであり、多数の画像に対してモジュラスを使用するよりも効率的です。

于 2012-10-15T18:14:24.413 に答える