2012-01-06 45 views
7

我想在同一個數組上運行3個本地函數:trim,strtoupper和mysql_real_escape_string。這可以做到嗎?Array_Map使用多個原生回調?

試圖通過數組作爲這樣的回調不工作:

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

回答

10

你」你必須這樣做:

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

(這個例子需要PHP 5.3+作爲我牛逼利用匿名函數)

+0

這就是我所想的;我需要最終爲回調編寫一個單獨的函數。不幸的是,我仍然停留在PHP 5.2.17上,所以我不得不做一個非匿名函數,但它仍然很好。謝謝! =) – 2012-01-06 23:28:25

+0

偉大的解決方案。是的它izz – 2014-12-08 14:57:26

4

你也可以這樣做:

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

什麼的。通過一個匿名函數來完成所有這些工作。

希望有所幫助。

祝你好運:)

5

是的,只是通過一個映射的結果到另一個:

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

@TimCooper:我展示了可能的解決方案 - 如果必須使用'array_map',則至少有3個解決方案。但是,的確,PHP確實不是最優的,因爲它將數組遍歷(每次不同)3次,並返回整個數組3次。 – Tadeck 2012-01-06 23:19:19