PHP 二维数组中某些key合并相同部分,不同部分组成新的数组

如何将 $arr 数组变成 $newArr 的结构

$arr = [
    [
        'id' => '1',
        'name' => 'a',
        'attr' => '红色',
        'val' => '10'
    ],
    [
        'id' => '1',
        'name' => 'a',
        'attr' => '蓝色',
        'val' => '11'
    ],
    [
        'id' => '2',
        'name' => 'b',
        'attr' => '绿色',
        'val' => '12'
    ],
    [
        'id' => '2',
        'name' => 'b',
        'attr' => '黄色',
        'val' => '13'
    ],
];

要变成的数组结构:

$arr = [
    [
        'id' => '1',
        'name' => 'a',
        'info' => [
             ['attr' => '红色', 'val' => '10']
             ['attr' => '蓝色', 'val' => '11']
        ]
    ],
    [
        'id' => '2',
        'name' => 'b',
        'info' => [
             ['attr' => '绿色', 'val' => '12']
             ['attr' => '绿色', 'val' => '13']
        ]
    ]
];
回复
阅读 1.6k
1 个回答
$data = [];
array_map(function($key) use (&$data){
    if (!isset($data[$key['id']])) {
        $data[$key['id']] = [
            'id' => $key['id'],
            'name' => $key['name'],
        ];
    }
    $data[$key['id']]['info'][] = [
        'attr' => $key['attr'],
        'val' => $key['val'],
    ];
}, $arr);
print_r(array_values($data));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏