鍍金池/ 問答/PHP/ PHP 二維數(shù)組中某些key合并相同部分,不同部分組成新的數(shù)組

PHP 二維數(shù)組中某些key合并相同部分,不同部分組成新的數(shù)組

如何將 $arr 數(shù)組變成 $newArr 的結(jié)構(gòu)

$arr = [
    [
        'id' => '1',
        'name' => 'a',
        'attr' => '紅色',
        'val' => '10'
    ],
    [
        'id' => '1',
        'name' => 'a',
        'attr' => '藍(lán)色',
        'val' => '11'
    ],
    [
        'id' => '2',
        'name' => 'b',
        'attr' => '綠色',
        'val' => '12'
    ],
    [
        'id' => '2',
        'name' => 'b',
        'attr' => '黃色',
        'val' => '13'
    ],
];

要變成的數(shù)組結(jié)構(gòu):

$arr = [
    [
        'id' => '1',
        'name' => 'a',
        'info' => [
             ['attr' => '紅色', 'val' => '10']
             ['attr' => '藍(lán)色', 'val' => '11']
        ]
    ],
    [
        'id' => '2',
        'name' => 'b',
        'info' => [
             ['attr' => '綠色', 'val' => '12']
             ['attr' => '綠色', 'val' => '13']
        ]
    ]
];
回答
編輯回答
笨尐豬
$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));
2018年4月6日 11:32