2012-07-05 23 views
5

मैं एक सरणी साहचर्य है कि क्या जांच करने के लिए निम्न कोड या नहींतुलना सरणी अनुक्रमित सरणी

function is_associative($arr) { 
    $arr = array_keys($arr); 
    return $arr != array_keys($arr); 
} 

ऐसा लगता है कि सरणियों के लिए सच रिटर्न लिखा है पूर्णांक और संख्यात्मक सरणियों

लेकिन यह की तरह एक तत्व के साथ साहचर्य सरणियों के लिए सच वापस नहीं करता है के लिए झूठी:

01,235,
array("a" =>9); 

यह एकल तत्व के साथ सहयोगी सरणी के लिए झूठा क्यों लौटाता है?

+1

आपको 'array_diff' – alfasin

उत्तर

8

आप अपने तुलना में !== उपयोग करने की आवश्यकता:

return $arr !== array_keys($arr); 

यह उन दोनों के सच होने का correct output उत्पन्न करता है।

अन्यथा प्रकार करतब दिखाने बराबर के रूप में एक तत्व सरणी के लिए मूल्यों पर विचार करेंगे:

array(1) { [0]=> string(1) "a" } 
array(1) { [0]=> int(0) } 

यहाँ, "a" == 0 सच है (के रूप में "एक" चुपचाप 0 को डाला जाता है), लेकिन "a" === 0 गलत है।

+0

हाँ का उपयोग करना चाहिए, यह समस्या थी: धन्यवाद –

+0

क्यों वे एक ही प्रकार के नहीं हैं जब यह एकल तत्व सरणी है? –

+1

@ जेनुजेडी - मैंने अपने उत्तर को अपडेट किया है कि क्या हो रहा है इसके बारे में एक और स्पष्ट विवरण के साथ – nickb

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