我有一个像(json_decode的结果)的数组:
array(2) {
[0]=>
object(stdClass)#1 (3) {
["key"]=>
string(6) "sample"
["startYear"]=>
string(4) "2000"
["endYear"]=>
string(4) "2015"
}
[1]=>
object(stdClass)#2 (3) {
["key"]=>
string(13) "second_sample"
["startYear"]=>
string(4) "1986"
["endYear"]=>
string(4) "1991"
}
}
我想将其转换为数组:
array(2) {
["sample"]=>
array(2) {
["startYear"]=>
string(4) "2000"
["endYear"]=>
string(4) "2015"
}
["second_sample"]=>
array(2) {
["startYear"]=>
string(4) "1986"
["endYear"]=>
string(4) "1991"
}
}
有没有美丽的方法来做到这一点(我正在使用foreach,但我不确定这是一个最好的解决方案。)
添加了一个代码示例:
<?php
$str='[{"key":"sample","startYear":"2000","endYear":"2015"},{"key":"second_sample","startYear":"1986","endYear":"1991"}]';
$arr=json_decode($str);
var_dump($arr);
$newArr=array();
foreach ($arr as $value){
$value=(array)$value;
$newArr[array_shift($value)]=$value;
}
var_dump($newArr);
答案 0 :(得分:2)
您可以使用array_reduce
$myArray = array_reduce($initialArray, function ($result, $item) {
$item = (array) $item;
$key = $item['key'];
unset($item['key']);
$result[$key] = $item;
return $result;
}, array());
答案 1 :(得分:0)
只需将array_map
视为
$result = array_map('get_object_vars',$your_array);
<强>编辑:强>
在检查代码后,您已经在此处添加了示例,无需使用额外的函数或循环将对象数组转换为关联数组,而只需传递第二个参数true
内的json_decode
功能如
$arr = json_decode($json,true);
答案 2 :(得分:0)
我认为这是最干净的解决方案。不过我不知道这个的性能如何。
$array = json_decode(json_encode($arary),true);