PHP将JSON数组转换为嵌套的

时间:2018-01-05 14:49:06

标签: php json

我试图通过名称获取JSON并将其保存为与该嵌套相关的所有内容的变量, 最好的方法是什么? (在我的场景中,名称是唯一的)

[{
    "name": "Joe",
    "age": "30",
    "gender": "male"
},
{ 
    "name": "Logan", 
    "age": "27",
    "gender": "male"
}]

这样的事情

{
"Joe": [{
    "name": "Joe",
    "age": "30",
    "gender": "male"
}],
"Logan": [{
    "name": "Logan",
    "age": "27",
    "gender": "male"
}]
}

我需要能够搜索名称以获得正确的名称,API切换顺序,因此无法从id

获取

2 个答案:

答案 0 :(得分:1)

嗨这可能有助于你

$list = '[ 
   { 
      "name":"Joe",
      "age":"30",
      "gender":"male"
   },
   {  
      "name":"Logan",
      "age":"27",
      "gender":"male"
   }]';


$newjson = json_decode($list, true);
$final = [];

foreach ($newjson as $key => $value) {
  $final[$value['name']][]=$value;
}
$finaloutput = json_encode($final, true);
echo "<pre>";
print_r($finaloutput);
echo "</pre>";
exit;

输出

{"Joe":
[{"name":"Joe","age":"30","gender":"male"}],

"Logan":
[{"name":"Logan","age":"27","gender":"male"}]}

答案 1 :(得分:1)

Laravel Collections Library是一个非常有用的lib,可以使用像你这样的案例。

对于此问题,您可以使用keyBy方法!

$json = '[ 
   { 
      "name":"Joe",
      "age":"30",
      "gender":"male"
   },
   {  
      "name":"Logan",
      "age":"27",
      "gender":"male"
   }
]';

$array = collect(json_decode($json, true))->keyBy('name')->all();

print_r($array); // will be the array with the keys defined by the name!

请参阅https://laravel.com/docs/5.5/collections#method-keyby