2009-02-17 22 views
9

मेरे पास एक सरणी है:PHP में सरणी में स्ट्रिंग कैसे खोजें?

$array = array("apple", "banana", "cap", "dog", etc..) up to 80 values. 

और एक स्ट्रिंग वेरिएबल:

$str = "abc"; 

अगर मैं यह जांचना चाहता हूं कि यह स्ट्रिंग ($str) सरणी में मौजूद है या नहीं, तो मैं preg_match फ़ंक्शन का उपयोग करता हूं, इस तरह है:

$isExists = preg_match("/$str/", $array); 

if ($isExists) { 
    echo "It exists"; 
} else { 
    echo "It does not exist"; 
} 

क्या यह सही तरीका है? यदि सरणी बड़ी हो जाती है, तो क्या यह बहुत धीमी होगी? क्या कोई और तरीका है? मैं अपने डेटाबेस यातायात को स्केल करने की कोशिश कर रहा हूं।

और यदि मेरे पास तुलना करने के लिए दो या दो से अधिक तार हैं, तो मैं यह कैसे कर सकता हूं?

+0

) दो समारोह in_array (का उपयोग करें और array_search() कर सकते हैं आपका दिन कैसा देखना ट्यूटोरियल मुझे http://braincybersolutions.com/php-tutorial/php-search-in-array/ – syam

उत्तर

6

तुम सिर्फ एक सटीक मिलान की जरूरत है, का उपयोग in_array ($ str, $ सरणी) - यह तेजी से हो जाएगा।

एक और दृष्टिकोण एक एसोसिएटिव सरणी का उपयोग अपने तारों के साथ कुंजी के रूप में करना होगा, जो कि लॉगरिदमिक रूप से तेज़ होना चाहिए। संदेह है कि आप उस 80 और तत्वों के साथ रैखिक खोज दृष्टिकोण के बीच एक बड़ा अंतर देखेंगे।

यदि आप को पैटर्न मिलान की आवश्यकता है, तो आपको preg_match का उपयोग करने के लिए सरणी तत्वों पर लूप करना होगा।


आपने सवाल पूछा कि "क्या आप कई तारों की जांच करना चाहते हैं?" - आप उन तार से अधिक पाश करने की आवश्यकता होगी, लेकिन आप जैसे ही आप एक मैच नहीं मिलता है बंद कर सकते हैं ...

$find=array("foo", "bar"); 
$found=count($find)>0; //ensure found is initialised as false when no terms 
foreach($find as $term) 
{ 
    if(!in_array($term, $array)) 
    { 
     $found=false; 
     break; 
    } 
} 
3

क्यों निर्मित समारोह in_array का उपयोग नहीं? (http://www.php.net/in_array)

preg_match केवल तभी काम करेगा जब किसी अन्य स्ट्रिंग में सबस्ट्रिंग की तलाश हो। (source)

4

preg_match एक स्ट्रिंग इनपुट को एक सरणी की अपेक्षा करता है। आप विधि आप वर्णित का उपयोग करते हैं तो आपको मिलेंगे:

चेतावनी:() के पैरामीटर 2 स्ट्रिंग, सरणी लाइन एक्स पर स्थिति में दी गई यह उम्मीद

आप in_array हैं:

if (in_array ($str , $array)) { 
    echo 'It exists'; 
} else { 
    echo 'Does not exist'; 
} 
+0

अगर मैं है द्वारा तैयार 2 स्ट्रिंग, सरणी में कैसे मिलान करें ??? – roa3

+0

स्ट्रिंग इस $ var "id1; id2" की तरह स्ट्रिंग; – roa3

+0

पॉल डिक्सन का उत्तर ऊपर से जवाब देता है। – zi3guw

2

आप एक से अधिक मूल्य है, तो आप या तो separatly प्रत्येक मान का परीक्षण कर सकते हैं:

if (in_array($str1, $array) && in_array($str2, $array) && in_array($str3, $array) /* … */) { 
    // every string is element of the array 
    // replace AND operator (`&&`) by OR operator (`||`) to check 
    // if at least one of the strings is element of the array 
} 

या आप दोनों तार और सरणी के एक intersection कर सकता है:

$strings = array($str1, $str2, $str3, /* … */); 
if (count(array_intersect($strings, $array)) == count($strings)) { 
    // every string is element of the array 
    // remove "== count($strings)" to check if at least one of the strings is element 
    // of the array 
} 
0

समारोह in_array() केवल एक सरणी तत्व अगर पूर्ण प्रविष्टियां पता लगाता है। यदि आप किसी सरणी के भीतर आंशिक स्ट्रिंग का पता लगाना चाहते हैं, तो प्रत्येक तत्व का निरीक्षण किया जाना चाहिए।

foreach ($array AS $this_string) { 
    if (preg_match("/(!)/", $this_string)) { 
    echo "It exists"; 
    } 
} 
संबंधित मुद्दे