Php 使用多个本机回调的数组\u映射?
我想在同一个数组上运行3个本机函数: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'))); 尽管这很好,因为它只使用一个本机函
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
);