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

时间:2014-03-15 19:35:09

标签: php associative-array

我有以下数据:

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

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

    [2] => Array
        (
            [id] => 4
            [tag] => tag-a
        )
)

如果有重复的ID,我想重构tag,所以它的格式如下:

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

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

我已经能够通过循环重复的报告来获得工作。但是想知道是否有更有效的方法来实现这种阵列结构?

1 个答案:

答案 0 :(得分:0)

  1. 将源数组转换为哈希表(key => value数组)。
  2. 从哈希表构建所需的结果数组。
  3. 实现:

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