3

私は初期配列を持っています:

$arr0 = array(
    0 => array(
        'a' => 1,
        'b' => 1
    )
    1 => array(
        'a' => 2,
        'b' => 1
    )
    2 => array(
        'a' => 3,
        'b' => 2
    )
    3 => array(
        'a' => 4,
        'b' => 3
    )
    4 => array(
        'a' => 5,
        'b' => 3
    )
);

次のように、フィールド「b」のメンバーの値に応じて、個別の配列に分割したいと思います。

// $arr1 contains $arr0[0] and $arr0[1] because their value of 'b' is 1.
$arr1 = array(
    0 => array(
        'a' => 1,
        'b' => 1
    )
    1 => array(
        'a' => 2,
        'b' => 1
    )
);

// $arr2 contains $arr0[2] because its value of 'b' is 2.
$arr2 = array(
    0 => array(
        'a' => 3,
        'b' => 2
    )
);

// $arr3 contains $arr0[3] and $arr0[4] because their value of 'b' is 3.
$arr3 = array(
    0 => array(
        'a' => 4,
        'b' => 3
    )
    1 => array(
        'a' => 5,
        'b' => 3
    )
);

ここで、フィールド 'b' は任意の自然数の値を持つことができるので、常に 3 つの結果の配列が必要になるとは限りません。

ここで関連する質問 (および回答) を見つけましたが、「b」の元の値が何であるか、および異なる値がいくつあるかを事前に知らないため、私の問題は特定のものです。

何か案は?

(編集: $arr3 は $arr1 として書き込まれました)

4

2 に答える 2

7
foreach ($arr0 as $value) {
  ${"arr" . $value['b']}[] = $value;
}
// $arr1, $arr2 and $arr3 are defined

2行目には、変数名を動的に作成する魔法があります。ただし、そのプログラミング方法は本当に扱いにくいものです。次のように、結果をさらに別の配列に変換することをお勧めします。

foreach ($arr0 as $value) {
  $allarr[$value['b']][] = $value;
}
// $allarr is defined
于 2012-05-28T20:24:53.357 に答える
1
foreach ($arr0 as $val) {
    $b = $val ['b'];
    if (!$arr$b) $arr$b = array();
    $arr$b[] = $val;
}
于 2012-05-28T20:23:09.460 に答える