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 ответа
Решение
Вам нужно будет сделать это следующим образом:
$exclude = array_map(function($item)
{
return mysql_real_escape_string(strtoupper(trim($item)));
}, explode("\n", variable_get('gs_stats_filter', 'googlebot')));
(Этот пример требует PHP 5.3+, так как он использует анонимные функции)
Да, просто передайте результат одного сопоставления другому:
$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
);
Вы также можете сделать что-то вроде:
$exclude = array_map(function($item) {
return trim(strtoupper(mysql_real_escape_string($item)));
}, explode(...));
или что-то. Передайте анонимную функцию, которая делает все это.
Надеюсь, это поможет.
Удачи:)