将包含对象的数组转换为不带 foreach 的关联数组

Evg*_*kov 4 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为数组,如下所示:

 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有美丽的方法来做到这一点(目前我正在使用 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);
Run Code Online (Sandbox Code Playgroud)

Mat*_*hai 6

您可以使用array_reduce

$myArray = array_reduce($initialArray, function ($result, $item) {
    $item = (array) $item;

    $key = $item['key'];
    unset($item['key']);

    $result[$key] = $item;

    return $result;
}, array());
Run Code Online (Sandbox Code Playgroud)