PHP多维数组怎么根据键值进行合并?
[
{
"workID": "JP20221113",
"in_stock": 10100
},
{
"workID": "JP20221114",
"in_stock": 5124
},
{
"workID": "JP20221113",
"out_stock": 10100
}
]
怎么根据workID合并这个数组,得到下面的结果?
[
{
"workID": "JP20221113",
"in_stock": 10100,
"out_stock": 10100
},
{
"workID": "JP20221114",
"in_stock": 5124
}
]
回复
1个回答

test
2024-07-14
循环的时候 workId 作为键,然后面的合并就好了。
<?php
$data = json_decode(
<<<JSON
[
{
"workID": "JP20221113",
"in_stock": 10100
},
{
"workID": "JP20221114",
"in_stock": 5124
},
{
"workID": "JP20221113",
"out_stock": 10100
}
]
JSON
,
true
);
$result = array_reduce($data, function ($result, $current) {
// 把 workID 作为键
$target = array_merge($result[$current['workID']] ?? [], $current);
$result[$current['workID']] = $target;
return $result;
}, []);
$result = array_values($result);
var_dump($result);
// 易读版
$result = [];
foreach ($data as $item) {
$result[$item['workID']] = array_merge($result[$item['workID']] ?? [], $item);
}
$result = array_values($result);
var_dump($result);
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容