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

假设我有以下多维数组(从 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()可以做到这一点。

191497 次浏览

从 PHP 5.5开始,您可以使用 array_column:

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

这是任何现代项目的首选方案,但是,如果您必须支持 PHP < 5.5,则存在以下替代方案:

从 PHP 5.3开始,您可以使用带有匿名函数的 array_map,如下所示:

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

< sub > (技术上是 PHP 4.0.6 +) 之前,必须用 create_function创建一个匿名函数:

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

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

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

不过,你不一定要依赖这一点。 :)

PHP 5.5 +

从 PHP5.5 + 开始,您就可以使用 Array _ column ()了,这使得以下所有内容都过时了。

PHP 5.3 +

$ids = array _ map (函数($ar){ return $ar [‘ id’] ; } ,$users) ;

通过@phihag 的解决方案将在 PHP 中完美地工作,从 PHP 5.3.0开始,如果您 需要支持之前,您将需要复制该 wp _ list _ pluck。

PHP < 5.3

WordPress 3.1 +

在 Wordpress 中有一个函数叫做 < a href = “ http://codex.Wordpress.org/function _ Reference/wp _ list _ pluck”rel = “ noReferrer”> wp _ list _ pluck 如果你使用 WordPress 来解决你的问题。

PHP < 5.3

如果你不使用 Wordpress ,因为代码是开源的,你可以复制粘贴项目中的代码(并将函数重命名为你喜欢的名字,比如 array _ pick)。点击这里查看源代码

如果您更喜欢功能性更强的方法,也可以使用 array_reduce()

例如:

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

或者如果你喜欢花哨,

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

不过,这个方法和上面的所有方法都在幕后循环;)