2014-12-04 28 views
15

To może brzmieć jak głupie pytanie, ale: co jest szybsze podczas używania go do wyodrębnienia kluczowych w zapytaniu w PHP:W PHP, który jest szybszy: preg_split lub eksplodować?

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

lub

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

Dlaczego nie tylko punktem odniesienia jest? http://php.net/manual/en/function.microtime.php dowiaduj się sam;) –

+0

Dzięki @ Fred-ii- sprawdziłam to i znalazłem eksplodować jest szybszy niż preg_split(). Dla preg_split: 0.000036 sec i For wybuch: 0.000008 sec (Na tym samym małym zbiorze danych) –

Odpowiedz

6

Ogólna zasada: jeśli możesz zrobić coś bez wyrażeń regularnych, rób to bez nich!

Jeśli chcesz podzielić łańcuch za pomocą spacji, eksplodować jest znacznie szybciej.

+0

Wskazówka: 'explode()' działa również z innymi znakami – Machavity

+1

Tak, wiem. Ale jeśli chciałby na przykład podzielić spacje LUB zakładki LUB nowe linie to nie byłoby dobrze :) – Forien

10

W prostym użycia explode() jest wówczas szybciej patrz micro-optimization.com/explode-vs-preg_split (link from web.archive.org)

jednak preg_split Zaletą języczków podtrzymujących (\t) i przestrzeni z \s.

Metaznak jest używany do znalezienia znaku białego.

spacjami postać może być (http://php.net/manual/en/regexp.reference.escape.php)

  • spacja (32 = 0x20)
  • karta postaci (9 = 0x09)
  • wózek zwrotny charakter (13 = 0x0D)
  • znak nowego wiersza (10 = 0x0A)
  • postaci znaku podawania (12 = 0x0C)

W takim przypadku należy zobaczyć koszty i korzyści.

Końcówka użyć array_filter dla "Usuń" pustych elementów w tablicy:

Przykład:

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

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

Uwaga:RegExp Perfomance

+0

Rozbicie może również obsługiwać karty. 'explode (" \ t ", $ string)' – Forien

+0

@Forien Nie powiedziałem, że 'explode()' nie obsługuje "zakładek", powiedziałem że '\ s' z' preg_split' obsługuje "spacje" i "tab" " w tym samym czasie.:) –

+2

Nie ma problemu, ale znalazłem to zdanie mylące :) najlepsza odpowiedź tutaj tak czy inaczej imho – Forien