2

在PHP中,是否有任何内置函数可以打开

[{"id":1, "name":"John"}, {"id":2, "name":"Tim"}]

进入

[{"id":1}, {"id":2}]

?

我使用 JSON 来描述上面的对象,但这只是我的关联数组数组的概念表示。我不想手动循环 - 我可以放在一条线上的简短而优雅的东西会很好。

4

4 回答 4

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));
于 2013-06-18T05:09:50.157 回答
1
array_map(function($arr){return $arr[0];}, $array);

这应该这样做。

编辑正如 Jonathon Hibbard 所指出的,您可以通过引用传递数组元素,这样您就不会分配函数的结果,而只是使用更改后的旧数组。然后应适当修改代码。

于 2013-06-18T05:01:26.090 回答
0

首先通过 json_decode 解码 json。你会得到一个数组。然后按照此链接从关联数组中删除索引。然后再解码。它应该工作。

于 2013-06-18T05:00:42.073 回答
0

做类似的事情:

$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);
于 2013-06-18T05:07:42.627 回答