【问题标题】:In PHP, filter an Array of Associative Arrays在 PHP 中,过滤关联数组的数组
【发布时间】:2013-06-18 04:47:21
【问题描述】:

在PHP中,有没有内置函数可以转

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

进入

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

?

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

【问题讨论】:

  • array_multisort() 但这很棘手。
  • @Steve 你能举个例子吗?

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


【解决方案1】:

一行,使用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));

【讨论】:

  • 任何其他 PHP 新手的快速说明:此解决方案适用于解码的 json object,但在为 associative arrays 数组实现时,请确保将 $el->id 引用更改为 $el['id']。
【解决方案2】:
array_map(function($arr){return $arr[0];}, $array);

应该这样做。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      做一些类似的事情:

      $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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        • 2021-05-10
        • 2021-03-06
        • 1970-01-01
        相关资源
        最近更新 更多