सबसे पहले, यदि आप सचमुच ही दर्जनों हर मिनट कर रहे हैं, तो मैं इस मामले में प्रदर्शन के बारे में बहुत चिंता नहीं करता। इन मैचों में बहुत जल्दी कर रहे हैं, और मुझे नहीं लगता कि इस तरह से अपनी पैटर्न सरणी के माध्यम से पुनरावृत्ति और अलग से preg_match फोन करके आप एक प्रदर्शन समस्या है करने के लिए जा रहे हैं:
$matches = false;
foreach ($pattern_array as $pattern)
{
if (preg_match($pattern, $page))
{
$matches = true;
}
}
आप वास्तव में एक में सभी पैटर्न गठजोड़ कर सकते हैं का उपयोग कर or
ऑपरेटर कुछ लोगों की तरह सुझाव दे रहे हैं, लेकिन सिर्फ उन्हें एक |
के साथ एक साथ थप्पड़ मारता नहीं है। यह बुरी तरह अगर आपके पैटर्न के किसी भी या ऑपरेटर शामिल टूट जाएगा।
मैं सिफारिश करेंगे कम से कम की तरह कोष्ठक का उपयोग कर अपने पैटर्न समूहीकरण:
foreach ($patterns as $pattern)
{
$grouped_patterns[] = "(" . $pattern . ")";
}
$master_pattern = implode($grouped_patterns, "|");
लेकिन ... मैं सच में यकीन है कि अगर यह तेजी से किया जा रहा समाप्त होता है नहीं कर रहा हूँ। कुछ उन्हें लूप करने के लिए है, चाहे वह preg_match या PHP है। अगर मुझे लगता है कि मुझे लगता है कि व्यक्तिगत मैच पढ़ने और बनाए रखने के लिए तेज़ और आसान के करीब होंगे।
आखिरकार, यदि प्रदर्शन आप यहां देख रहे हैं, तो मुझे लगता है कि सबसे महत्वपूर्ण बात यह है कि गैर रेगेक्स मैचों को एक साधारण "स्ट्रिंग में" चेक में खींचें। मैं कल्पना करता हूं कि आपके कुछ चेक सरल स्ट्रिंग चेक होना चाहिए जैसे कि यह देखने के लिए कि "यह साइट बंद है" पृष्ठ पर है या नहीं।
तो यह कर:
foreach ($strings_to_match as $string_to_match)
{
if (strpos($page, $string_to_match) !== false))
{
// etc.
break;
}
}
foreach ($pattern_array as $pattern)
{
if (preg_match($pattern, $page))
{
// etc.
break;
}
}
और के रूप में कई preg_match()
संभव के रूप में शायद अपने सबसे अच्छे लाभ होने जा रहा है परहेज। strpos()
बहुतpreg_match()
से तेज़ है।
गूगलर के लिए, एक बार आप एक मैच मिल गया है foreach लूप से बाहर तोड़ने के लिए ब्रेक (http://www.php.net/manual/en/control-structures.break.php) का उपयोग पर विचार करते हैं! –
मेरा मानना है कि यह होना चाहिए: कम से कम $ पैटर्न के रूप में $ pattern_array), कम से कम PHP – hellomynameisjoel
के मेरे संस्करण में आप लोगों को ... आपकी टिप्पणियों को संबोधित करने के लिए संपादित किया गया है। – danieltalsky