PHP-根据键值对将一个数组拆分为2个数组

时间:2018-08-08 19:04:23

标签: php

一个对象数组=

[{
    "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"
}] 

3 个答案:

答案 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/nj936

此方法只会循环类型的唯一计数,即使您向列表中添加新的类型,例如https://3v4l.org/Jf0SE

,该方法也将起作用