Array 按键合并动态多维数组
Array Merge Dynamic Multidimensional Array by Key
这是我的多维数组示例。这是通过表单生成的,所以这是一个动态数组,因此可能有超过 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
],
];
与往常一样,对于此类分组问题,请使用 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;
}
}
这是我的多维数组示例。这是通过表单生成的,所以这是一个动态数组,因此可能有超过 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
],
];
与往常一样,对于此类分组问题,请使用 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;
}
}