在PHP中,过滤一组关联数组

时间:2013-06-18 04:47:22

标签: php arrays associative-array projection higher-order-functions

在PHP中,是否有任何内置函数可以转动

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

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

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

4 个答案:

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