Array_Map使用多个本机回调?

时间:2012-01-06 23:05:32

标签: php arrays callback array-map

我想在同一个数组上运行3个本机函数:trim,strtoupper和mysql_real_escape_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')));

3 个答案:

答案 0 :(得分:11)

你必须这样做:

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

(此示例需要PHP 5.3+,因为它使用了匿名函数)

答案 1 :(得分:6)

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

$result = array_map(
    'mysql_real_escape_string',
    array_map(
        'trim',
        array_map(
            'strtoupper',
            $your_array
        )
    )
);

您还可以在PHP 5.3 +中使用回调:

$result = array_map(function($x){
    return mysql_real_escape_string(trim(strtoupper($x)));
}, $your_array);

或更早版本(在低于5.3的PHP版本中):

$result = array_map(
    create_function('$x','return mysql_real_escape_string(trim(strtoupper($x)));'),
    $your_array
);

答案 2 :(得分:5)

您还可以执行以下操作:

  $exclude = array_map(function($item) {
     return trim(strtoupper(mysql_real_escape_string($item)));
  }, explode(...));

或者其他什么。传入一个完成所有这些工作的匿名函数。

希望有所帮助。

祝你好运:)