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.5k
1 个回答

循环的时候 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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题