如何通过其内部数组的特定键对多维数组进行分组?

时间:2016-06-20 18:10:45

标签: php arrays multidimensional-array

我有一个这样的数组:

$my_array = array(
    array(
        array('cnt' => 1, 'date' => '2016-06-18', 'name' => 'Phone Calls'),
        array('cnt' => 1,'date' => '2016-06-18','name' => 'Others Works')
    ),
    array(
        array('cnt' => 2 , 'date' => '2016-06-17', 'name' => 'Phone Calls'),
        array('cnt' => 1, 'date' => '2016-06-17', 'name' => 'Others Works')
    )
);

我需要将其转换为以下格式以实现我的特定目的。

$desired_result = array(
    array('name' => 'Phone Calls', 'dateDetail' => array(
        array('cnt' => 1, 'date' => '2016-06-18'),
        array('cnt' => 2, 'date' => '2016-06-17'),
    )),
    array('name' => 'Others Works', 'dateDetail' => array(
        array('cnt' => 1, 'date' => '2016-06-18'),
        array('cnt' => 1, 'date' => '2016-06-17'),        
    ))
);

我需要按名称对数组进行分组,并将所有日期和计数数据放在一起。有人可以帮我格式化这个数组吗?

1 个答案:

答案 0 :(得分:2)

您可以通过从每个最低级别数组中弹出名称并将其用作重组数组的更高级别键来按名称分组。

foreach ($your_array as $day) {
    foreach ($day as $item) {
        $name = array_pop($item);                  // removes the 'name' key and returns it
        $converted[$name]['name'] = $name;
        $converted[$name]['dateDetail'][] = $item;
    }
}

$result = array_values($converted);                // convert from string keys to numeric

array_pop只能使用,因为name是项目数组中的最后一个键。如果不是,您需要指定要删除和使用的键,如下所示:

$name = $item['name'];
unset($item['name']);

要在每个date的{​​{1}}数组中按dateDetail添加分组,这个想法与按名称分组时的想法相同。在name中使用date作为密钥,并为重复的日期值添加dateDetail密钥。

cnt