2012-03-01 12 views

risposta

15

Supponendo che si desidera rimuovere sia ( e ) dalla stringa $search:

$search = preg_replace('/\(|\)/','',$search); 

Penso che il modo più veloce per farlo è usare il Funzione strtr, come questa:

$search = strtr($search, array('(' => '', ')' => '')); 
+0

Ah, grazie. Ho funzionato. – Norse

+0

Non è necessario il wrapping extra '()' serve per esportare il modello che in questo caso non è necessario. –

+0

@ Tony: davvero! Li ho rimossi. –

0

Questa è la sintassi corretta, anche se preg_replace è per le espressioni regolari, se si desidera solo per sostituire () poi str_replace è un paio di volte più veloce.

Se si desidera sostituire ( o ) ovunque si trovino, si potrebbe usare

preg_replace("/\(|\)/", "", $str); 
+0

Sì, ma dovresti usare str_replace due volte però a destra, uno per ciascuna delle parentesi? – Norse

+1

Vero, ma scommetto 5 $ sarebbe ancora più veloce: P –

+1

@Tony: la funzione 'strtr' può eseguire più" str_replaces "in una volta. Lo uso in una classe di template di base ... invece di loop + str_replace, solo una singola chiamata strtr ... –

1

Vuoi dire come questo?

$search = preg_replace('/[()]/', '', $search); 

Questa operazione elimina tutte le parentesi senza tenere conto dell'accoppiamento.

+2

parentesi senza distinzione tra maiuscole e minuscole? :) –

+0

In genere questo è solo l'inizio ... la forza dell'abitudine. :) – Nilpo

9

Qui ci sono i miei risultati di un po 'di test sul campo:

preg_replace("/\(|\)/", "", $str): 1.590735912323

preg_replace('/[\(\)]/', '', $str): 1.3762638568878

strtr($str, array('(' => '', ')' => '')): 0.84079194068909

str_replace("(", "", str_replace(")", "", $str)): 0.80222821235657

Gli ultimi due sono quasi identici, come ha sottolineato J. Bruni.

+0

Aggiungilo al benchmark: 'preg_replace ('/ [\ (\)] /', '', $ str);' - e facci sapere i risultati. –

+0

Quindi, un paio di str_replaces è più veloce di un singolo strtr ... se l'array potrebbe essere evitato a favore di un paio di parametri di stringa, forse dovrebbe essere più veloce ... 'strtr ($ str, '()', '') '- ma questo non è il comportamento desiderato ... inoltre, avendo diversi rimpiazzi, sicuramente strtr vincerebbe! :-) –

+0

Sì, la gamma sembra più veloce. strstr e str_replace sono quasi gli stessi, non riesco a trovare differenze notevoli nel test corrente, salgono o scendono ogni volta .. strstr sarebbe comunque una soluzione più elegante. –

Problemi correlati