array_map内联匿名函数

66

我用array_map测试了内联匿名函数,在这里测试通过了。

但是当我尝试同样的方法将其应用到$user_meta上时,它却不起作用。

$user_meta = Array ( [interest] => Array ( [0] => Array ) [type] => 
     Array ( [0] => Array ) [user_status] => Array ( [0] => deny)
     [firstname] => Array ( [0] => ) [lastname] => Array ( [0] => B ) 
     [email] => email@cc.com ) 

$user_meta = array_map(function($a) { return $a[0]; },$user_meta);

"Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in"

这里是显示错误的测试链接


9
$user_meta数组的定义不符合PHP数组格式,这是print_r()函数输出的结果,为了方便人类阅读而格式化的。 - Mark Baker
1
PS:内联匿名函数仅适用于PHP 5.3+。 - gen_Eric
@Paulpro,为什么你要回滚格式更改? - jmattheis
邮件地址有问题!需要用引号将其括起来:"email@cc.com" - drew7721
4个回答

111

我希望这可以帮到你:

$user_meta = array_map(function ($a) { return $a[0]; }, $user_meta);

4
除了“函数关键字和其参数之间必须有空格”的说明之外,这是一个好答案。因为我去掉了空格并没有出现问题。 - Fandi Susanto
8
function 关键字后面的空格并不重要! - betatester07
2
空格不影响任何事情。 - drew7721
1
是的,语法看起来没问题。错误应该来自$user_meta定义。 - Dat TT

18

这里的array_map没问题,但是它之前的一切都是错误的。那是print_r的输出结果,不是PHP代码。请比较两个链接中你定义数组的方式。


当我传递带有参数的数组时,我遇到了相同的错误... 我只能通过显式调用函数来使它工作.. 这里 - B L Praveen
你用的是哪个版本的PHP?现在大多数人都至少使用5.3版本,你的代码在5.3版本及以上运行良好。 - Paul
我只使用PHP 5.5,你可以检查更新的链接。再次显示错误。 - B L Praveen
@BLPraveen,在标题为“Output for 5.3.0 - 5.5.1”的部分中没有错误。只有在旧版本的部分中存在错误。 - Paul
@BLPraveen 添加了一些输出,以便您可以看到它正在工作:http://3v4l.org/5NgCc - Paul
数组语法没问题... array('0' => '') 只是定义了一个关联数组,其中键 '0' 指向一个空字符串。错误几乎肯定是因为他使用的 PHP 版本早于 5.3。 - George

9
略微缩短可能更好。
$user_meta = array_map(fn ($a) => $a[0], $user_meta);

但是我更倾向于使用 array_column 方法来处理这样的 array_map


3

这并不是回答你的问题,但是如果您想要返回每个子数组的第一个键,您可以使用 array_column 函数。

$user_meta = array_column($user_meta, 0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接