一个对象数组=
[{
"id": "5b2a4b0287bc2c082ebc2897",
"test_name": "BSF",
"test_type": "Pathology",
"cost": "100"
}, {
"id": "5b2a4ac63db998081e7f6c97",
"test_name": "Brain & PNS",
"test_type": "Radiology",
"cost": "1000"
}, {
"id": "5b2a4ac63db998081e22336c97",
"test_name": "BPNS",
"test_type": "Radiology",
"cost": "1000"
}]
我想基于键值对-“ test_type”将对象数组拆分为两个单独的对象数组
O / p第一个数组
[{
"id": "5b2a4b0287bc2c082ebc2897",
"test_name": "BSF",
"test_type": "Pathology",
"cost": "100"
}]
第二个数组
[ {
"id": "5b2a4ac63db998081e7f6c97",
"test_name": "Brain & PNS",
"test_type": "Radiology",
"cost": "1000"
},{
"id": "5b2a4ac63db998081e22336c97",
"test_name": "BPNS",
"test_type": "Radiology",
"cost": "1000"
}]
答案 0 :(得分:1)
您可以创建临时数组:
$arr = json_decode($str, true);
foreach($arr as $a){
if($a['test_type'] == 'Radiology'){
$radiology_array[] = $a;
}
if($a['test_type'] == 'Pathology'){
$pathology_array[] = $a;
}
...
}
答案 1 :(得分:0)
我相信这是JSON格式。
只需使用旧的json_decode($variable)
并将每个键分配给另一个变量即可。
$result = json_decode($variable);
$type = [];
foreach ($result as $item) {
$type[$item->test_type][] = $item;
}
这样,每个test_type将具有其自己的密钥。可以用作每个test_type的一个数组。
答案 2 :(得分:-1)
您可以使用array_column来创建一个平面数组,并将其用作匹配数组。
循环匹配数组($ type)时,可以使用array_intersect根据需要获取子数组。
我将它们放置在可以提取到新变量的关联数组中。
$arr = json_decode($json,true);
$type = array_column($arr, "test_type");
Foreach(array_unique($type) as $t){
$new[$t] = array_intersect_key($arr, array_intersect($type, [$t]));
}
extract($new);
var_dump($Radiology, $Pathology);
此方法只会循环类型的唯一计数,即使您向列表中添加新的类型,例如https://3v4l.org/Jf0SE
,该方法也将起作用