PHP - 根据字段值将多维数组分割

3

I have an initial array:

$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)

foreach,没有任何内置的东西可以做到这一点。 - zerkms
你的数组是如何构建的?也许更改它会更好。 - vascowhite
我的数组是数据库查询的结果,其中 $arr[0]、$arr[1] 等是表格行。字段 'a' 和 'b' 分别是数据库字段 'content_type' 和 'content_unit'。我需要根据特定类型和特定单位判断第三个数据库字段的值并显示,同时显示属于指定类型的所有内容以及属于指定单位的所有内容。 - Томица Кораћ
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

1
foreach ($arr0 as $val) {
    $b = $val ['b'];
    if (!$arr$b) $arr$b = array();
    $arr$b[] = $val;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接