将带有对象的数组转换为一个没有foreach的关联数组

时间:2015-11-18 13:44:24

标签: php

我有一个像(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);

3 个答案:

答案 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);

Demo

答案 2 :(得分:0)

我认为这是最干净的解决方案。不过我不知道这个的性能如何。

$array = json_decode(json_encode($arary),true);
相关问题