Php 使用多个本机回调的数组\u映射?

Php 使用多个本机回调的数组\u映射?,php,arrays,callback,array-map,Php,Arrays,Callback,Array Map,我想在同一个数组上运行3个本机函数:trim、strtoupper和mysql\u real\u escape\u string。这能做到吗 试图以回调的形式传递数组,但这样做不起作用: $exclude = array_map(array('trim','strtoupper','mysql_real_escape_string'), explode("\n", variable_get('gs_stats_filter', 'googlebot'))); 尽管这很好,因为它只使用一个本机函

我想在同一个数组上运行3个本机函数:
trim
strtoupper
mysql\u real\u escape\u string
。这能做到吗

试图以回调的形式传递数组,但这样做不起作用:

$exclude = array_map(array('trim','strtoupper','mysql_real_escape_string'), explode("\n", variable_get('gs_stats_filter', 'googlebot')));
尽管这很好,因为它只使用一个本机函数作为回调:

$exclude = array_map('trim', explode("\n", variable_get('gs_stats_filter', 'googlebot')));

你必须这样做:

$exclude = array_map(function($item) {
    return mysql_real_escape_string(strtoupper(trim($item)));
}, explode("\n", variable_get('gs_stats_filter', 'googlebot')));

您还可以执行以下操作:

  $exclude = array_map(function($item) {
     return trim(strtoupper(mysql_real_escape_string($item)));
  }, explode(...));
或者别的什么。传入一个匿名函数来完成所有这些工作

希望有帮助


祝你好运:)

是的,只需将一个映射的结果传递到另一个:

$result = array_map(
    'mysql_real_escape_string',
    array_map(
        'trim',
        array_map(
            'strtoupper',
            $your_array
        )
    )
);
您还可以在PHP5.3+中使用回调:

$result = array_map(function($x){
    return mysql_real_escape_string(trim(strtoupper($x)));
}, $your_array);
或更早版本(在低于5.3的PHP版本中):


@蒂姆库珀:我正在展示可能的解决方案——如果必须使用
array\u map
,至少有3种。但是,是的,实际上PHP使它不是最优的,因为它遍历数组(每次都不同)3次,然后返回整个数组3次;我需要为回调编写一个单独的函数。不幸的是,我仍然停留在PHP5.2.17上,所以我不得不创建一个非匿名函数,但是,它仍然工作得很好。谢谢!=)
$result = array_map(
    create_function('$x','return mysql_real_escape_string(trim(strtoupper($x)));'),
    $your_array
);