2012-07-05 102 views
5

我已經寫下面的代碼來檢查數組是否是關聯與否比較關聯數組的鍵陣列整數索引數組

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

它對於像陣列返回true:

array("a" => 5,"b" => 9); 

並且對於數字陣列爲假

但是,對於具有單個元素的關聯數組,它不會返回true:

array("a" =>9); 

爲什麼它返回false爲單個元素的關聯數組?

+1

你應該使用'array_diff' – alfasin 2012-07-05 19:49:47

回答

8

你需要在比較中使用!==

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

這會產生他們兩個是真正的correct output

否則類型雜耍將考慮爲單個元件陣列中的值作爲等於:

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

這裏,"a" == 0爲真(如「a」被默默地轉換爲0),但是"a" === 0是假的。

+0

是的,這是問題:謝謝 – 2012-07-05 19:50:36

+0

爲什麼它們是單一元素數組時不是同一類型? – 2012-07-05 19:51:41

+1

@JinuJD - 我已經更新了我的回答,並更清楚地描述了發生了什麼事情 – nickb 2012-07-05 19:54:16