PHP array_walk闭包没有为给定变量正确赋值

时间:2014-03-09 14:02:43

标签: php arrays

我有包含这些元素的数组:id,email,type

我想删除类型和ID并保留电子邮件。

我已经回显并打印了数组和后续元素,一切都很好。

但是为了过滤数组并仅返回列表电子邮件,将编写以下代码,但这些代码无效:

             $arr = array_walk($final_list, function($var){
                 return $var['email'];                 
           });

如果我回复$var['email'],它会相应地回复电子邮件。

2 个答案:

答案 0 :(得分:1)

array_walk()用于将回调函数应用于数组中的所有元素。要过滤数组,请改用array_filter()

$arr = array_filter($final_list, function ($elem) {
    return $elem == 'email';
});

但是,如果您使用的是PHP 5.5+,则可以使用非常方便的函数array_column()来实现此目的:

$arr = array_column($final_list, 'email');

如果您使用的是旧版本的PHP并且无法升级到PHP 5.5,则可以使用该函数的Userland实现(由为PHP核心编写array_column()函数的同一作者编写)。源代码可在this GitHub repository上找到。

答案 1 :(得分:1)

您正在使用array_walk,就好像它是array_map一样。这可行:

$arr = array_map(function($var){ return $var['email']; }, $final_list);

在PHP 5.5+上还有一种更方便的方法:

$arr = array_column($final_list, 'email');

以上两个版本都是非破坏性的:它们会从您的输入数组中创建电子邮件数据的副本。

仅为了完整性,并且在(不太可能)你不想要这种情况的情况下,因为它耗尽了额外的内存,而宁愿通过从中删除数据来修改你的输入,{{1}是一个选项:

array_walk