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