Php 将特定密钥上的JSON数据分组

Php 将特定密钥上的JSON数据分组,php,arrays,json,grouping,Php,Arrays,Json,Grouping,假设JSON数据如下 $string = '{ "John": { "status":"Wait", "id":"001" }, "Jennifer": { "status":"Active", "id":"002" }, "James": { "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0, "id":"003" },

假设JSON数据如下

$string = '{
"John": {
    "status":"Wait",
    "id":"001"
},
"Jennifer": {
    "status":"Active",
    "id":"002"
},
"James": {
    "status":"Active",
    "age":56,
    "count":10,
    "progress":0.0029857,
    "bad":0,
    "id":"003"
},
 "Adam": {
    "status":"Wait",
    "age":71,
    "count":10,
    "progress":0.0029857,
    "bad":0,
    "id":"004"
}
}';
我需要将数组分组到特定人员的“状态”。就像密钥应该成为“Status”值,数组中人员的id作为它的值。

我深入研究了这一点,找到了答案。。
I gone through that deep and found the answer for that.. 


$result = array();
foreach($json_a as $person => $value)
{
      foreach($value as $key => $personal)
    {
          $key_s = $value['status'];
          $id_s =  $value['id'];
        $result[$key_s][$id_s]['name'] = $person;
        $result[$key_s][$id_s][$key] = $personal;

    }  
}


print "<pre>";
print_r($result);
$result=array(); foreach($json\u作为$person=>$value) { foreach($key=>$personal的值) { $key_s=$value['status']; $id_s=$value['id']; $result[$key\u s][$id\u s]['name']=$person; $result[$key\u s][$id\u s][$key]=$personal; } } 打印“”; 打印(结果);
$jsonData=json\u decode($YourJson,true);
$resultArr=array();
foreach($jsondataas$person=>$value){
foreach($key=>$val的值){
$k=$value['status'];
$i=$value['id'];
$resultArr[$k][$i]['name']=$person;
$resultArr[$k][$i][$key]=$val;
}
}
打印“”;
打印(Resultar);
只有在使用PHP>=5.5


注意:请注意,我从您想要的最终结果中切换了值和键,因为
状态中的值不唯一。这将导致值被覆盖,因此结果数组中只有两个元素。您可以看到和之间的区别,那么您尝试了什么?
$jsonData = json_decode($YourJson, true);

$resultArr = array();
foreach($jsonData as $person => $value) {
    foreach($value as $key => $val) {
        $k                         = $value['status'];
        $i                          = $value['id'];
        $resultArr[$k][$i]['name'] = $person;
        $resultArr[$k][$i][$key]   = $val;
    }
}

print "<pre>";
print_r($resultArr);
$json_string = '{
    "John": {
        "status":"Wait",
        "id":"001"
    },
    "Jennifer": {
        "status":"Active",
        "id":"002"
    },
    "James": {
        "status":"Active",
        "age":56,
        "count":10,
        "progress":0.0029857,
        "bad":0,
        "id":"003"
    },
    "Adam": {
        "status":"Wait",
        "age":71,
        "count":10,
        "progress":0.0029857,
        "bad":0,
        "id":"004"
    }
}';

$json_arr = json_decode($json_string, true);
$result = array_column($json_arr, 'status', 'id');