Array_Map с использованием нескольких собственных обратных вызовов? - PullRequest
8 голосов
/ 07 января 2012

Я хочу запустить 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 ]

11 голосов
/ 07 января 2012

Вам нужно будет сделать это следующим образом:

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

(в этом примере требуется PHP 5.3+, поскольку он использует анонимные функции)

6 голосов
/ 07 января 2012

Да, просто передайте результат одного сопоставления другому:

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

или более ранняя версия (в версиях PHP ниже 5.3):

$result = array_map(
    create_function('$x','return mysql_real_escape_string(trim(strtoupper($x)));'),
    $your_array
);
5 голосов
/ 07 января 2012

Вы также можете сделать что-то вроде:

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

или что-то. Передайте анонимную функцию, которая делает все это.

Надеюсь, это поможет.

Удачи:)

...