2014-12-04 10 views
15

यह एक बेवकूफ सवाल की तरह लग सकता है, लेकिन जब इसे का उपयोग php में एक खोज क्वेरी के कीवर्ड को निकालने के लिए जो तेजी से होता है:PHP में, जो तेज़ है: preg_split या विस्फोट?

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

या

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

क्यों नहीं बस इसे बेंचमार्क? http://php.net/manual/en/function.microtime.php अपने लिए ढूंढें;) –

+0

धन्यवाद @ फ्रेड-आईआई- इसके लिए चेक किया गया और पाया कि विस्फोट तेज है तो preg_split()। Preg_split के लिए: 0.000036 सेकंड और विस्फोट के लिए: 0.000008 सेकंड (उसी छोटे डेटा सेट पर) –

उत्तर

19

Explode is faster, per PHP.net

युक्ति यदि आपको नियमित अभिव्यक्तियों की शक्ति की आवश्यकता नहीं है, तो आप विस्फोट() या str_split() जैसे तेज़ (हालांकि सरल) विकल्प चुन सकते हैं।

6

सामान्य नियम: यदि आप नियमित अभिव्यक्तियों के बिना कुछ कर सकते हैं, तो उनके बिना ऐसा करें!

यदि आप रिक्त स्थान से स्ट्रिंग को विभाजित करना चाहते हैं, तो विस्फोट रास्ता तेज है।

+0

युक्ति: 'विस्फोट()' अन्य वर्णों के साथ काम करता है – Machavity

+1

हां, मुझे पता है। लेकिन अगर वह रिक्त स्थान या टैब या नई लाइनों द्वारा विभाजित उदाहरण के लिए चाहता था तो यह अच्छा नहीं होगा :) – Forien

10

एक सरल उपयोग explode() में तेजी से है, देखें: micro-optimization.com/explode-vs-preg_split (link from web.archive.org)

लेकिन preg_split समर्थन टैब (\t) और \s साथ रिक्त स्थान का लाभ दिया है।

\s मेटाएक्टेक्टर का उपयोग व्हाइटस्पेस चरित्र खोजने के लिए किया जाता है।

एक खाली स्थान के चरित्र हो सकता है (http://php.net/manual/en/regexp.reference.escape.php):

  • अंतरिक्ष चरित्र (32 = 0x20)
  • टैब वर्ण (9 = 0x09)
  • गाड़ी वापसी चरित्र (13 = 0x0D)
  • नया लाइन कैरेक्टर (10 = 0x0A)
  • फॉर्म फीड कैरेक्टर (12 = 0x0C)

इस मामले में आपको लागत और लाभ देखना चाहिए।

एक टिप, "हटाएँ" सरणी में खाली मदों के लिए array_filter का उपयोग करें:

उदाहरण:

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

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

नोट:RegExp Perfomance

+0

विस्फोट टैब का भी समर्थन कर सकता है। 'विस्फोट (" \ t ", $ string)' – Forien

+0

@ फ़ोरियन मैंने यह नहीं कहा कि 'विस्फोट() '" टैब "का समर्थन नहीं करता है, मैंने कहा कि' preg_split' 'space' और" टैब का समर्थन करता है " एक ही समय में।:) –

+2

कोई समस्या नहीं है, लेकिन मुझे लगता है कि वाक्य भ्रामक है :) किसी भी तरह का सबसे अच्छा जवाब imho – Forien

संबंधित मुद्दे