2012-01-06 9 views
7

trim、strtoupper、mysql_real_escape_stringの3つのネイティブ関数を同じ配列で実行します。これはできますか?Array_Map複数のネイティブコールバックを使用していますか?

このようなコールバックが機能していないとして配列を渡すしようと

$exclude = array_map(array('trim','strtoupper','mysql_real_escape_string'), explode("\n", variable_get('gs_stats_filter', 'googlebot'))); 

それが唯一のコールバックとして1つのネイティブ機能を使用しているため、これは正常に動作しますが:

$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以降が必要です。

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

か何か:tは

+0

それは私が考えていたものです。私はコールバックのために別の関数を書くことになります。残念ながら私はまだPHP 5.2.17に固執していますので、私は非匿名の関数を作成しなければなりませんでしたが、それはまだまだ機能します。ありがとう! =) –

+0

すばらしい解決策。 yes it izz –

4

)無名関数を使用していますまた、のような何かを行うことができます。すべてのことをする無名関数を渡します。

希望に役立ちます。

幸運:)

5

はい、ちょうど別に1つのマッピングの結果を渡す:

$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回歩き、配列全体を3回返すからです。 – Tadeck

関連する問題