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”可以具有任何自然数作为值,因此我并不总是需要三个结果数组。

我在这里找到了一个相关的问题(和答案) ,但我的问题是具体的,因为我事先不知道原始值 'b' 有什么,以及有多少不同的值。

有任何想法吗?

(编辑:$arr3 写成 $arr1)

4

2 回答 2

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

第二行有一个神奇的地方,它动态地构建了一个变量名。但是,这种编程方式确实很笨拙。您最好将结果放入另一个数组中,如下所示:

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 回答