PHP数组到多维json数据



我有下面的php代码,它生成一个json数据集

$json_data = array(
"code"=>"200",
"name"=>"My Name",
"serial_number"=>"serial"
);
$result =  json_encode($json_data);

数据集只是一个级别。当我用php循环创建这个数据集时。我希望能够有多个人,但代码元素在用户之外。所以基本上我希望json数据看起来像这样:

{
"code": "404",
"people": [
{
"name": "Person 1",
"serial_number": "xyz"
},
{
"name": "Person Two",
"serial_number": "123"
}
]
}

基本上,您希望按属性对对象数组进行分组"代码";。这方面有很多问题。以下是使用array_reduce的一种可能方法。


$json_data = [
[
"code" => "200",
"name" => "My Name1",
"serial_number" => "serial1",
], [
"code" => "200",
"name" => "My Name2",
"serial_number" => "serial2",
], [
"code" => "400",
"name" => "My Name3",
"serial_number" => "serial3",
],
];
$result = array_values(array_reduce($json_data, function ($agg, $item) {
if (!isset($agg[$item['code']])) {
$agg[$item['code']] = [
"code" => $item['code'],
"people" => [],
];
}
$agg[$item['code']]['people'][] = [
"name" => $item["name"],
"serial_number" => $item["serial_number"],
];
return $agg;
}, []));
print_r($result);

输出:

Array
(
[0] => Array
(
[code] => 200
[people] => Array
(
[0] => Array
(
[name] => My Name1
[serial_number] => serial1
)
[1] => Array
(
[name] => My Name2
[serial_number] => serial2
)
)
)
[1] => Array
(
[code] => 400
[people] => Array
(
[0] => Array
(
[name] => My Name3
[serial_number] => serial3
)
)
)
)

最新更新