J. *_*ein 8 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')));
Run Code Online (Sandbox Code Playgroud)
虽然这很好,因为它只使用一个本机函数作为回调:
$exclude = array_map('trim', explode("\n", variable_get('gs_stats_filter', 'googlebot')));
Run Code Online (Sandbox Code Playgroud)
Tim*_*per 11
你必须以这样的方式做到这一点:
$exclude = array_map(function($item)
{
return mysql_real_escape_string(strtoupper(trim($item)));
}, explode("\n", variable_get('gs_stats_filter', 'googlebot')));
Run Code Online (Sandbox Code Playgroud)
(这个例子需要PHP 5.3+,因为它使用了匿名函数)
是的,只需将一个映射的结果传递给另一个映射:
$result = array_map(
'mysql_real_escape_string',
array_map(
'trim',
array_map(
'strtoupper',
$your_array
)
)
);
Run Code Online (Sandbox Code Playgroud)
您还可以在PHP 5.3+中使用回调:
$result = array_map(function($x){
return mysql_real_escape_string(trim(strtoupper($x)));
}, $your_array);
Run Code Online (Sandbox Code Playgroud)
或更早版本(在低于5.3的PHP版本中):
$result = array_map(
create_function('$x','return mysql_real_escape_string(trim(strtoupper($x)));'),
$your_array
);
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
$exclude = array_map(function($item) {
return trim(strtoupper(mysql_real_escape_string($item)));
}, explode(...));
Run Code Online (Sandbox Code Playgroud)
或者其他的东西.传入一个完成所有这些工作的匿名函数.
希望有所帮助.
祝好运 :)