2012-01-06 14 views
7

Voglio eseguire 3 funzioni native sullo stesso array: trim, strtoupper e mysql_real_escape_string. Può essere fatto?Array_Map utilizzando più callback nativi?

Cercando di passare un array come un callback come questo non funziona:

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

Anche se questo funziona bene perché è solo con una funzione nativa come il callback:

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

risposta

10

You' Lo devo fare in un modo come questo:

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

(Questo esempio richiede PHP 5.3+ come t fa uso di funzioni anonime)

+0

Questo è quello che avevo immaginato; che dovrei finire per scrivere una funzione separata per il callback. Sfortunatamente sono ancora bloccato su PHP 5.2.17 quindi ho dovuto fare una funzione non anonima, MA, funziona comunque alla grande. Grazie! =) –

+0

Ottima soluzione. sì it izz –

4

Si potrebbe anche fare qualcosa di simile:

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

o qualcosa del genere. Passa in una funzione anonima che fa tutto questo.

Spero che questo aiuti.

Buona fortuna :)

5

Sì, basta passare il risultato di una mappatura in un altro:

$result = array_map(
    'mysql_real_escape_string', 
    array_map(
     'trim', 
     array_map(
      'strtoupper', 
      $your_array 
     ) 
    ) 
); 

È anche possibile utilizzare un callback in PHP 5.3+:

$result = array_map(function($x){ 
    return mysql_real_escape_string(trim(strtoupper($x))); 
}, $your_array); 

o precedente (nelle versioni di PHP inferiore a 5.3):

$result = array_map(
    create_function('$x','return mysql_real_escape_string(trim(strtoupper($x)));'), 
    $your_array 
); 
+0

@TimCooper: sto mostrando le possibili soluzioni - ce ne sono almeno 3 se si deve usare 'array_map'. Ma sì, anzi PHP lo rende non ottimale, perché percorre l'array (ogni volta che è diverso) 3 volte e restituisce l'intero array 3 volte. – Tadeck