in_array कई मान


110

मैं कई मूल्यों के लिए कैसे जांच कर सकता हूं, जैसे:

$arg = array('foo','bar');

if(in_array('foo','bar',$arg))

यह एक उदाहरण है ताकि आप थोड़ा बेहतर समझें, मुझे पता है कि यह काम नहीं करेगा।

जवाबों:


200

लक्ष्य को लक्ष्य के साथ जोड़ते हैं और सुनिश्चित करते हैं कि चौराहा लक्ष्यों के बराबर है:

$haystack = array(...);

$target = array('foo', 'bar');

if(count(array_intersect($haystack, $target)) == count($target)){
    // all of $target is in $haystack
}

ध्यान दें कि आपको केवल परिणामी चौराहे के आकार को सत्यापित करने की आवश्यकता है जो कि लक्ष्य मानों के सरणी के आकार के समान है जो कि $haystackसुपरसेट है $target

यह सत्यापित करने के लिए कि कम से कम एक मान इसमें $targetभी है $haystack, आप यह जाँच कर सकते हैं:

 if(count(array_intersect($haystack, $target)) > 0){
     // at least one of $target is in $haystack
 }

13
यह समाधान सबसे अच्छा नहीं है: $ सुई = सरणी (1,2); $ भूसे के ढेर = सरणी (1,1,2,3); वापसी (गिनती (array_intersect ($ haystack, $ सुई))) == गिनती ($ सुई); यह गलत होगा, यह अच्छा नहीं है। इस मामले के लिए रोक क्रालज का समाधान अच्छा है।
इत्सु

1
मुझे लगता है कि उन सरणी को अद्वितीय डेटा रखना चाहिए और अन्यथा यह समाधान काम नहीं करेगा
हसन कंचन

182

एक डेवलपर के रूप में, आपको संभवतः सेट ऑपरेशंस (अंतर, मिलन, प्रतिच्छेदन) सीखना शुरू करना चाहिए। आप अपने सरणी को एक "सेट" के रूप में कल्पना कर सकते हैं, और कुंजी जिसे आप दूसरे के लिए खोज रहे हैं।

जांचें कि क्या सभी सुई मौजूद हैं

function in_array_all($needles, $haystack) {
   return empty(array_diff($needles, $haystack));
}

echo in_array_all( [3,2,5], [5,8,3,1,2] ); // true, all 3, 2, 5 present
echo in_array_all( [3,2,5,9], [5,8,3,1,2] ); // false, since 9 is not present

जांच करें कि कोई भी सुइयां मौजूद हैं या नहीं

function in_array_any($needles, $haystack) {
   return !empty(array_intersect($needles, $haystack));
}

echo in_array_any( [3,9], [5,8,3,1,2] ); // true, since 3 is present
echo in_array_any( [4,9], [5,8,3,1,2] ); // false, neither 4 nor 9 is present

9
नोट: इस प्रकार का ऐलान घोषणा है> = PHP 5.4
क्लाउडी होज्डा

उत्कृष्ट समाधान प्रदान किया गया है ताकि आपको सख्त तुलना करने की आवश्यकता न हो।
faintsignal

14
if(in_array('foo',$arg) && in_array('bar',$arg)){
    //both of them are in $arg
}

if(in_array('foo',$arg) || in_array('bar',$arg)){
    //at least one of them are in $arg
}

7

यह देखने के लिए @Rok Kralj उत्तर (सर्वोत्तम IMO) बंद जा रहा है कि क्या कोई सुइयों के अस्तित्व में है या नहीं, आप (bool)इसकी जगह उपयोग कर सकते हैं !!जिसके बजाय कभी-कभी कोड समीक्षा के दौरान भ्रमित किया जा सकता है।

function in_array_any($needles, $haystack) {
   return (bool)array_intersect($needles, $haystack);
}

echo in_array_any( array(3,9), array(5,8,3,1,2) ); // true, since 3 is present
echo in_array_any( array(4,9), array(5,8,3,1,2) ); // false, neither 4 nor 9 is present

https://glot.io/snippets/f7dhw4kmju


9
यह एक नए उत्तर की तुलना में रोक के जवाब पर एक टिप्पणी के रूप में अधिक उपयोगी होगा।
faintsignal

@Jaymin ऐसा कैसे (आपने ZERO विवरण प्रदान किया) ... मेरे लिए पूरी तरह से ठीक काम करता है glot.io/snippets/f7dhw4kmju
s शैलियाँ

@ स्टाइल मैंने पूर्णांक के बजाय सरणी में स्ट्रिंग मान का उपयोग करने की कोशिश की थी। आप अपनी तरफ से एक बार कोशिश कर सकते हैं और मुझे बता सकते हैं।
Jaymin

@Jaymin के पास अभी भी यह मुद्दा नहीं है कि glot.io/snippets/f7dhw4kmju
syles शैलियाँ

यह बूल रूपांतरण यहाँ उपयुक्त नहीं है क्योंकि array_intersect एक सरणी देता है जो खाली या गैर-रिक्त हो सकती है। @ आरके-क्रालज समाधान एकमात्र पसंदीदा है।
कोडेलनर

3

इस समस्या के लिए IMHO मार्क इलियट का समाधान सबसे अच्छा है। यदि आपको सरणी तत्वों और आप PHP 5.3 पर अधिक जटिल तुलनात्मक संचालन करने की आवश्यकता है, तो आप निम्नलिखित के बारे में भी कुछ सोच सकते हैं:

<?php

// First Array To Compare
$a1 = array('foo','bar','c');

// Target Array
$b1 = array('foo','bar');


// Evaluation Function - we pass guard and target array
$b=true;
$test = function($x) use (&$b, $b1) {
        if (!in_array($x,$b1)) {
                $b=false;
        }
};


// Actual Test on array (can be repeated with others, but guard 
// needs to be initialized again, due to by reference assignment above)
array_walk($a1, $test);
var_dump($b);

यह एक बंद होने पर निर्भर करता है; तुलना समारोह अधिक शक्तिशाली बन सकता है। सौभाग्य!


मैंने बदल दिया कि मैंने अंतिम आउटपुट में पहले से ही सब कुछ कैसे किया, मुझे इसे किसी भी तरह से करने की ज़रूरत नहीं थी, हालांकि यह हमेशा सीखने के लिए अच्छा है, आपके इनपुट और आपके समय के लिए धन्यवाद!
डेरिल

2
if(empty(array_intersect([21,22,23,24], $check_with_this)) {
 print "Not found even a single element";
} else {
 print "Found an element";
}

array_intersect () array1 के सभी मूल्यों से युक्त एक सरणी देता है जो सभी तर्कों में मौजूद हैं। ध्यान दें कि कुंजियाँ संरक्षित हैं।

सरणी 1 में उन सभी मानों को समाहित करता है जिनके मान सभी मापदंडों में मौजूद हैं।


खाली () - निर्धारित करें कि क्या एक चर खाली है

यदि संस्करण मौजूद है तो FALSE लौटाता है और इसमें एक गैर-खाली, गैर-शून्य मान होता है। अन्यथा TRUE लौटाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.