PHP多维数组怎么根据键值进行合并?

作者站长头像
站长
· 阅读数 9
[
    {
        "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个回答
avatar
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);
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容