我正在尝试按一列值 (
order_id
) 对 3d 数组中的数据进行分组,并合并每组内 products
列中的子数组值。
样本数据:
$ordersGlobal = [
[
"order_id" => "65",
"products" => [
[
"description" => "Test6",
"brand" => "ACL",
"code" => "303127005576",
"OriginalPrice" => "328.0000"
]
]
],
[
"order_id" => "66",
"products" => [
[
"description" => "Test5",
"brand" => "TEA",
"code" => "3900055",
"OriginalPrice" => "43.0000"
]
]
],
[
"order_id" => "66",
"products" => [
[
"description" => "Te3st4",
"brand" => "TEA",
"code" => "3900056",
"OriginalPrice" => "43.0000"
]
]
]
]
想要的结果:
[
[
"order_id" => "65",
"products" => [
[
"description" => "Test6",
"brand" => "ACL",
"code" => "303127005576",
"OriginalPrice" => "328.0000"
]
]
],
[
"order_id" => "66",
"products" => [
[
"description" => "Test5",
"brand" => "TEA",
"code" => "3900055",
"OriginalPrice" => "43.0000"
],
[
"description" => "Te3st4",
"brand" => "TEA",
"code" => "3900056",
"OriginalPrice" => "43.0000"
]
]
]
]
我的编码尝试:
$order_merge = array();
foreach ($ordersGlobal as $k => $data) {
$orderId1 = $data['order_id'];
$orderId2 = next($ordersGlobal)['order_id'] ?? false;
if ($orderId1 == $orderId2) {
$order_merge[$k]['order_id'] = $data['order_id'];
$order_merge[$k]['products'] = array_merge(
next($ordersGlobal)['products'],
$data['products']
);
} else {
$order_merge[$k]['order_id'] = $data['order_id'];
// $order_merge[$k]['customerId'] = 1 $order_merge[$k]['products'] = $data['products'];
}
}
我认为应该有效
$productsTemp = [];
$ordersMerge = [];
foreach ($ordersGlobal as $actualOrder)
{
if (key_exists($actualOrder["order_id"], $productsTemp))
{
array_push($productsTemp[$actualOrder["order_id"]]["products"], $actualOrder["products"][0]);
}
else
{
$productsTemp[$actualOrder["order_id"]]["products"] = $actualOrder["products"];
}
}
$ordersMerge[] = $productsTemp;
这是一种简洁的方法,可将唯一引用推送到结果数组中,并将一个或多个
products
值添加到组的子数组中。
代码:(演示)
$result = [];
foreach ($array as $row) {
if (!isset($ref[$row['order_id']])) {
$ref[$row['order_id']] = $row;
$result[] = &$ref[$row['order_id']];
} else {
array_push($ref[$row['order_id']]['products'], ...$row['products']);
}
}
var_export($result);