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

php
2022-08-30 06:46:47

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

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

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

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

也许有些,可以做魔术。array_map()call_user_func_array()


答案 1

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

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

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

答案 2

5.5 菲律宾比索

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

5.3 菲律宾比索

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

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

< 5.3 菲律宾比索

文字新闻 3.1+

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

< 5.3 菲律宾比索

如果您没有使用Wordpress,由于代码是开源的,因此您可以将代码复制粘贴到项目中(并将函数重命名为您喜欢的名称,例如array_pick)。在此处查看源代码


推荐