数组按键

时间:2016-08-30 17:59:44

标签: php arrays multidimensional-array array-merge

这是我的多维数组示例。这是通过表单生成的,因此这是一个动态数组,因此可能有超过3个条目。

$array = 
[
    [
        'itemNo' => 1,
        'desc' => [
            ['serialNo' => 1, 'name' => 'a'],
            ['serialNo' => 2, 'name' => 'b']
        ],
        'quantity' => 2
    ],
    [
        'itemNo' => 2,
        'desc' => [
            ['serialNo' => 1, 'name' => 'a1'],
        ],
        'quantity' => 1
    ],
    [
        'itemNo' => 1,
        'desc' => [
            ['serialNo' => 3, 'name' => 'c']
        ],
        'quantity' => 1
    ]
];

我想按键[itemNo]合并这些数组。在此示例中,Array [0]和Array [2]具有相同的键' 1'。

我想要的结果是......

$merged = 
[
    [
        'itemNo' => 1,
        'desc' => [
            ['serialNo' => 1, 'name' => 'a'],
            ['serialNo' => 2, 'name' => 'b']
            ['serialNo' => 3, 'name' => 'c']
        ],
        'quantity' => 3
    ],
    [
        'itemNo' => 2,
        'desc' => [
            ['serialNo' => 1, 'name' => 'a1'],
        ],
        'quantity' => 1
    ],
];

1 个答案:

答案 0 :(得分:0)

与对此类问题进行分组一样,请使用itemNo作为您尝试生成的分组数组中的键。

foreach ($your_array as $x) {
    $id = $x['itemNo'];  // set the key


    if (isset($grouped[$id])) {

        // increment if that id is already set
        $grouped[$id]['desc'] = array_merge($grouped[$id]['desc'], $x['desc']);
        $grouped[$id]['quantity'] += $x['quantity'];
    } else {

        // add the entire entry if not
        $grouped[$id] = $x;
    }   
}