ऐसा इसलिए है क्योंकि 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'])) {
}
स्रोत
2012-12-16 12:35:56
आह, मैं देखता हूं। यह प्रत्येक सरणी कुंजी के मानों को भी देख रहा है। – John
@ जॉन यह वास्तव में ** केवल ** इन्हें देख रहा है। – ComFreek
@ जॉन मैंने जवाब अपडेट किया है, अगर आप कुछ और ढूंढ रहे थे। –