假设我有以下多维数组(从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()
可以发挥魔力。
答案 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)
启动PHP5.5 +您可以使用array_column(),这使得以下所有内容都已过时。
$ids = array_map(function ($ar) {return $ar['id'];}, $users);
@phihag的解决方案将从PHP 5.3.0开始在PHP中完美运行,如果你的话 在此之前需要支持,你需要复制那个wp_list_pluck。
在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);
这和上面的所有方法都会在后台循环;)