2015-09-13 6 views
8

कैसे सुनिश्चित करें कि आंशिक मिलान स्ट्रिंग और सरणी के बीच मौजूद नहीं है?आंशिक स्ट्रिंग के खिलाफ PHP मिलान ऐरे

if (!array_search($operating_system , $exclude)) { 

जहां $ का मूल्य OPERATING_SYSTEM बाहरी विवरण होता है और कभी नहीं होगा सिर्फ बॉट, क्रॉल या मकड़ी:

अभी मैं सिंटैक्स का उपयोग कर रहा हूँ।

एक उदाहरण के रूप $ OPERATING_SYSTEM का मूल्य

"Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" 

$ को बाहर अवांछित आइटम की एक सरणी

$exclude = [ 
    'bot', 
    'crawl', 
    'spider' 
]; 

मैं अगर विफल इस उदाहरण चाहते हैं क्योंकि बॉट निहित है है दोनों स्ट्रिंग में और एक सरणी तत्व है।

+4

एक regexp का प्रयोग करें एक स्ट्रिंग सूची के बजाय। – mario

उत्तर

3

यह कोड आपके लिए अच्छी तरह से काम करना चाहिए।

उपयोगकर्ता पैरामीटर के साथ सरणी खोज फ़ंक्शन को पहले पैरामीटर के रूप में कॉल करें और दूसरे पैरामीटर के रूप में बाहर करने के लिए टेक्स्ट की सरणी को कॉल करें। सरणी में एक पाठ उपयोगकर्ता एजेंट स्ट्रिंग में पाया जाता है तो फ़ंक्शन एक 1. अन्यथा यह रिटर्न एक 0.

function arraySearch($operating_system, $exclude){ 
    if (is_array($exclude)){ 
     foreach ($exclude as $badtags){ 
      if (strpos($operating_system,$badtags) > -1){ 
       return 1; 
      } 
     } 
    } 
    return 0; 
} 
3

यहाँ एक सरल नियमित अभिव्यक्ति समाधान है:

<?php 
$operating_system = 'Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)'; 
$exclude = array('bot', 'crawl', 'spider'); 

$re_pattern = '#'.implode('|', $exclude).'#'; // create the regex pattern 
if (!preg_match($re_pattern, $operating_system)) 
    echo 'No excludes found in the subject string !)'; 
else echo 'There are some excludes in the subject string :o'; 
?> 
+1

यदि आप _case insensitive_ मिलान चाहते हैं, तो बस दूसरे '#' के ठीक बाद 'i' वर्ण डालें :) – someOne

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