2012-12-16 16 views
7
$arr = array(
    'test' => array(
     'soap' => true, 
    ), 
); 

$input = 'hey'; 
if (in_array($input, $arr['test'])) { 
    echo $input . ' is apparently in the array?'; 
} 

परिणाम: हे जाहिर तौर पर सरणी में है?in_array कोई समझ नहीं आता

यह मुझे कोई समझ नहीं आता है, कृपया बताएं क्यों। और मैं इसे कैसे ठीक करूं?

उत्तर

11

ऐसा इसलिए है क्योंकि type juggling के कारण। क्या आप के लिए देख रहे हैं:

if (in_array($input, $arr['test'], true)) { 

यह एक समानता === बजाय == के आधार पर परीक्षण बाध्य करती है।

in_array('hey', array('soap' => true)); // true 

in_array('hey', array('soap' => true), true); // false 

प्रकार करतब दिखाने बेहतर ढंग से समझने के लिए आप इस के साथ खेल सकते हैं:

var_dump(true == 'hey'); // true (because 'hey' evaluates to true) 

var_dump(true === 'hey'); // false (because strings and booleans are different type) 

अद्यतन

आप को पता है एक सरणी कुंजी सेट है, तो चाहते हैं (यदि एक के बजाय मान मौजूद है), आपको isset() का उपयोग इस तरह करना चाहिए:

if (isset($arr['test'][$input])) { 
    // array key $input is present in $arr['test'] 
    // i.e. $arr['test']['hey'] is present 
} 

अद्यतन 2

वहाँ भी है array_key_exists() कि सरणी कुंजी उपस्थिति के लिए परीक्षण कर सकते हैं; हालांकि, इसका उपयोग केवल तभी किया जाना चाहिए जब कोई संभावना हो कि संबंधित सरणी मान null हो सकता है।

if (array_key_exists($input, $arr['test'])) { 
} 
+0

आह, मैं देखता हूं। यह प्रत्येक सरणी कुंजी के मानों को भी देख रहा है। – John

+0

@ जॉन यह वास्तव में ** केवल ** इन्हें देख रहा है। – ComFreek

+0

@ जॉन मैंने जवाब अपडेट किया है, अगर आप कुछ और ढूंढ रहे थे। –

2

आप सरणी का उपयोग एक शब्दकोश के रूप में कर रहे हैं लेकिन in_array फ़ंक्शन का उपयोग तब किया जाना चाहिए जब आप इसे किसी सरणी की तरह उपयोग कर रहे हों। the documentation देखें।

+0

तो आप कह रहे हैं कि मैं याद करने वाली सरणी हूं, अगर ऐसा करने के लिए बेहतर तरीके हैं, तो क्या हासिल करने की कोशिश कर रहा हूं, कृपया ellobarate। – John

+0

@ जॉन 'in_array() 'एक मूल्य के लिए खोज। तो यह प्रत्येक आइटम के माध्यम से चला जाता है और सुई के खिलाफ यह जांचता है। लेकिन यदि आप सख्त मोड का उपयोग नहीं कर रहे हैं, तो 'सत्य ==' वह सत्य के लिए evalute होगा। जैक के जवाब पर मेरा संपादन देखें। – ComFreek

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