2014-12-04 14 views
15

Questo può sembrare una domanda stupida, ma: che è più veloce quando lo si utilizza per estrarre le parole chiave in una query di ricerca in php:In PHP, che è più veloce: preg_split o esplode?

$keyword = preg_split('/[\s]+/', $_GET['search']); 

o

$keyword = explode(' ', $_GET['search']); 
+6

Perché non solo punto di riferimento vero? http://php.net/manual/en/function.microtime.php scopri tu stesso;) –

+0

Grazie @ Fred-i-ha verificato questo problema e trovato l'esplosione è più veloce di preg_split(). Per preg_split: 0,000036 sec e For explode: 0,000008 sec (Sullo stesso set di piccoli dati) –

risposta

19

Explode is faster, per PHP.net

Suggerimento Se non hai bisogno della potenza delle espressioni regolari, puoi scegliere alternative più veloci (anche se più semplici) come explode() o str_split().

6

Regola generale: se puoi fare qualcosa senza espressioni regolari, fallo senza di loro!

se si desidera dividere stringa per spazi, esplodere è molto più veloce.

+0

Suggerimento: 'explode()' funziona anche con altri caratteri – Machavity

+1

Sì, lo so. Ma se volesse, ad esempio, dividere per spazi O tabulazioni O nuove linee, allora non sarebbe buono :) – Forien

10

In un semplice utilizzo explode() è più veloce, vedi: micro-optimization.com/explode-vs-preg_split (link from web.archive.org)

Ma preg_split presenta il vantaggio di alette di supporto (\t) e spazi con \s.

il metacarattere \s viene utilizzato per trovare un carattere di spaziatura.

uno spazio bianco può essere (http://php.net/manual/en/regexp.reference.escape.php):

  • spazio di carattere (32 = 0x20)
  • scheda carattere (9 = 0x09)
  • trasporto carattere di ritorno (13 = 0x0D)
  • carattere di nuova riga (10 = 0x0A)
  • carattere di avanzamento modulo (12 = 0x0C)

In questo caso si dovrebbe vedere il costo e il beneficio.

Un consiglio, utilizzare array_filter per "Cancella" voci vuote nella matrice:

Esempio:

$keyword = explore(' ', $_GET['search']); //or preg_split 
print_r($keyword); 

$keyword = array_filter($arr, 'empty'); 
print_r($keyword); 

Nota:RegExp Perfomance

+0

explode può supportare anche le schede. 'explode (" \ t ", $ stringa)' – Forien

+0

@Forien Non ho detto che 'explode()' non supporta "tabs", ho detto che '\ s' con' preg_split' supporta "spazio" e "tab" " allo stesso tempo.:) –

+2

Nessun problema, ma ho trovato la frase fuorviante :) Risposta migliore qui comunque imho – Forien