如何在没有循环的情况下在多维数组中获取特定“键”的数组

时间:2011-11-03 12:01:56

标签: php

假设我有以下多维数组(从MySQL或服务中检索):

array(
    array(
        [id] => xxx,
        [name] => blah
    ),
    array(
        [id] => yyy,
        [name] => blahblah
    ),
    array(
        [id] => zzz,
        [name] => blahblahblah
    ),
)

我们可以在一个“内置”php函数调用中获取id的数组吗?或一行代码?
我知道传统的循环并获得价值,但我不需要这个:

foreach($users as $user) {
    $ids[] = $user['id'];
}
print_r($ids);

也许某些array_map()call_user_func_array()可以发挥魔力。

4 个答案:

答案 0 :(得分:219)

从php 5.5开始,你可以使用array_column

$ids = array_column($users, 'id');

从php 5.3开始,您可以将array_map与匿名函数一起使用,如下所示:

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

(技术上为php 4.0.6 +) 之前,您必须使用create_function创建一个匿名函数:

$ids = array_map(create_function('$ar', 'return $ar["id"];'), $users);

答案 1 :(得分:11)

PHP 5.5 +

启动PHP5.5 +您可以使用array_column(),这使得以下所有内容都已过时。

PHP 5.3 +

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

@phihag的解决方案将从PHP 5.3.0开始在PHP中完美运行,如果你的话 在此之前需要支持,你需要复制那个wp_list_pluck。

PHP< 5.3

Wordpress 3.1+

在Wordpress中有一个名为wp_list_pluck的函数 如果你正在使用Wordpress来解决你的问题。

PHP< 5.3

如果您没有使用Wordpress ,由于代码是开源的,您可以复制粘贴项目中的代码(并将函数重命名为您喜欢的内容,例如array_pick)。 View source here

答案 2 :(得分:2)

如果id是数组中的第一个键,那么这样做:

$ids = array_map('current', $users);

你不应该依赖于此。 :)

答案 3 :(得分:0)

如果您更喜欢实用的方法,也可以使用array_reduce()

例如:

$userNames = array_reduce($users, function ($carry, $user) {
    return $user['name'];
}, []);

或者,如果您想花哨的话,

$userNames = [];
array_map(function ($user) use (&$userNames){
    $userNames[]=$user['name'];
}, $users);

这和上面的所有方法都会在后台循环;)