PHP:使用对象属性作为键将对象转换为关联数组

时间:2018-08-01 18:10:53

标签: php arrays object

在PHP中,我想使用以下属性之一作为关联数组键,将如下所示的对象数组转换为PHP数组。

[
  { "id": 2, "name": "Suzy" },
  { "id": 3, "name": "Joe" },
  { "id": 4, "name": "Sara" }
]

像这样...

[
  2 => "Suzy",
  3 => "Joe",
  4 => "Sara"
]

我无法使用array_map,因为无法根据我的理解设置键,但是我想知道是否存在一种没有foreach循环的单线方式。

需要明确的是,我想将键保留在输出数组中,而不是像在这里那样将原始键放在新数组值中:PHP's array_map including keys

3 个答案:

答案 0 :(得分:3)

它以“对象”出现,表示您是JSON对象。因此,您可以使用array_column()从每一行中拉出一列,然后使用array_combine()将一列用作键,将另一列用作值:

$json = '[
    { "id": 2, "name": "Suzy" },
    { "id": 3, "name": "Joe" },
    { "id": 4, "name": "Sara" }
]';
$array = json_decode($json, true);
$out = array_combine(array_column($array, 'id'), array_column($array, 'name'));
print_r($out);

收益:

Array
(
    [2] => Suzy
    [3] => Joe
    [4] => Sara
)

答案 1 :(得分:0)

2个衬里,但是有一个foreach。

<?php

$json = '[
  { "id": 2, "name": "Suzy" },
  { "id": 3, "name": "Joe" },
  { "id": 4, "name": "Sara" }
]';

$new_array = [];
foreach(json_decode($json,true) as $each_object) $new_array[$each_object['id']] = $each_object['name'];

print_r($new_array);

答案 2 :(得分:0)

$json = '[
    { "id": 2, "name": "Suzy" },
    { "id": 3, "name": "Joe" },
    { "id": 4, "name": "Sara" }
]';
$array = json_decode($json, true);
$result = array_column($array, 'name', 'id');