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