Php 重构关联数组中的重复数据

Php 重构关联数组中的重复数据,php,associative-array,Php,Associative Array,我得到了以下数据数组: Array ( [0] => Array ( [id] => 1 [tag] => tag-a ) [1] => Array ( [id] => 1 [tag] => tag-b ) [2] => Array (

我得到了以下数据数组:

Array
(
    [0] => Array
        (
            [id] => 1
            [tag] => tag-a
        )

    [1] => Array
        (
            [id] => 1
            [tag] => tag-b
        )

    [2] => Array
        (
            [id] => 4
            [tag] => tag-a
        )
)
如果存在重复的ID,我想重构
标记
,因此其格式如下:

Array
(
    [0] => Array
        (
            [id] => 1
            [tags] => Array
                (
                    [0] => tag-a
                    [1] => tag-b
                )
        )

    [1] => Array
        (
            [id] => 4
            [tags] => Array
                (
                    [0] => tag-a
                )
        )
)
我已经能够通过循环一个“重复的报告”使某些东西工作起来。但是想知道是否有更有效的方法来实现这种阵列结构

  • 将源数组转换为哈希表(
    key=>value
    array)
  • 从哈希表生成所需的结果数组
  • 实施:

    $result = array();
    foreach ($array as $el) {
        if (!isset($result[$id = $el['id']])) $result[$id] = array();
        $result[$id][] = $el['tag'];
    }
    
    $result = array_map(
        function ($id, $tags) { return array('id' => $id, 'tags' => $tags); },
        array_keys($result), array_values($result)
    );
    

    如果您共享当前的方法,我们只能判断是否有一种“更有效的方法”(不过我猜测,在生成的数组中添加一个有意义的键会稍微优化一些)。