2014-12-04 14 views
15

này nghe có vẻ như một câu hỏi ngu ngốc, nhưng: đó là nhanh hơn khi sử dụng nó để trích xuất từ ​​khóa trong một truy vấn tìm kiếm trong php:Trong PHP, nhanh hơn: preg_split hoặc phát nổ?

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

hoặc

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

Tại sao không chỉ benchmark nó? http://php.net/manual/en/function.microtime.php tìm ra cho chính mình;) –

+0

Cảm ơn @ Fred-ii- đã kiểm tra cho điều này và phát hiện thấy phát nổ nhanh hơn sau đó preg_split(). Đối với preg_split: 0.000036 giây và cho phát nổ: 0.000008 giây (Trên cùng một tập hợp dữ liệu nhỏ) –

Trả lời

19

Explode is faster, per PHP.net

Mẹo Nếu bạn không cần sức mạnh của cụm từ thông dụng, bạn có thể chọn các lựa chọn thay thế nhanh hơn (mặc dù đơn giản hơn) như explode() hoặc str_split().

6

Quy tắc chung: nếu bạn có thể làm điều gì đó mà không có biểu thức chính quy, hãy làm điều đó mà không có chúng!

nếu bạn muốn chia chuỗi bằng dấu cách, nổ là cách nhanh hơn.

+0

Mẹo: 'explode()' làm việc với các nhân vật khác cũng – Machavity

+1

Vâng, tôi biết. Nhưng nếu anh ta muốn ví dụ chia cho không gian HOẶC tab HOẶC dòng mới thì nó sẽ không được tốt :) – Forien

10

Trong một cách sử dụng đơn giản explode() là hơn nhanh hơn, xem: micro-optimization.com/explode-vs-preg_split (link from web.archive.org)

Nhưng preg_split có lợi thế là các tab hỗ trợ (\t) và không gian với \s.

các \s metacharater được sử dụng để tìm một nhân vật khoảng trắng.

Một ký tự khoảng trắng có thể được (http://php.net/manual/en/regexp.reference.escape.php):

  • nhân vật không gian (32 = 0x20)
  • tab nhân vật (9 = 0x09)
  • vận chuyển trở lại nhân vật (13 = 0x0D)
  • nhân vật mới dòng (10 = 0x0A)
  • dạng nhân vật thức ăn chăn nuôi (12 = 0x0C)

Trong trường hợp này bạn sẽ thấy các chi phí và lợi ích.

Một mẹo, sử dụng array_filter cho "xóa" các mặt hàng có sản phẩm nào trong mảng:

Ví dụ:

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

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

Lưu ý:RegExp Perfomance

+0

phát nổ có thể hỗ trợ các tab là tốt. 'explode (" \ t ", $ string)' – Forien

+0

@Forien Tôi không nói rằng 'explode()' không hỗ trợ "tab", tôi đã nói rằng '\ s' với' preg_split' hỗ trợ "không gian" và "tab " cùng một lúc.:) –

+2

Không có vấn đề, nhưng tôi thấy rằng câu gây hiểu lầm :) câu trả lời tốt nhất ở đây anyway imho – Forien

Các vấn đề liên quan