在PHP中,是否有任何内置函数可以打开
[{"id":1, "name":"John"}, {"id":2, "name":"Tim"}]
进入
[{"id":1}, {"id":2}]
?
我使用 JSON 来描述上面的对象,但这只是我的关联数组数组的概念表示。我不想手动循环 - 我可以放在一条线上的简短而优雅的东西会很好。
在PHP中,是否有任何内置函数可以打开
[{"id":1, "name":"John"}, {"id":2, "name":"Tim"}]
进入
[{"id":1}, {"id":2}]
?
我使用 JSON 来描述上面的对象,但这只是我的关联数组数组的概念表示。我不想手动循环 - 我可以放在一条线上的简短而优雅的东西会很好。
一行,使用array_map:
$arr = json_decode('[{"id":1, "name":"John"}, {"id":2, "name":"Tim"}]');
$new_arr = array_map(function($el){$ret=array("id"=>$el->id);return $ret;},$arr);
var_dump(json_encode($new_arr));
array_map(function($arr){return $arr[0];}, $array);
这应该这样做。
编辑正如 Jonathon Hibbard 所指出的,您可以通过引用传递数组元素,这样您就不会分配函数的结果,而只是使用更改后的旧数组。然后应适当修改代码。
首先通过 json_decode 解码 json。你会得到一个数组。然后按照此链接从关联数组中删除索引。然后再解码。它应该工作。
做类似的事情:
$array = json_decode($some_json_string, true);
array_walk($array, function($value, $key) use(&$array) {
if($key == "name") {
unset($array[$key]);
}
});
编辑:如果不重新分配,Cthulhu 的答案不会让你到达那里。虽然可以将它用作参考(等于步行。但如果你想使用地图,最好不要使用全新的数组副本重新分配并通过引用传递它,然后删除带有未设置的键它并继续前进。)
array_map(function(&$array) { unset($array['name']; }, $array);