2011-03-25 85 views
5

可能重複:
PHP Arrays: A good way to check if an array is associative or sequential?如何檢查數組是否列表?

你好:)

我想知道什麼是最短的(最好的)的方式來檢查,如果數組是

列表: array('a', 'b', 'c')

或者它的關聯數組: array('a' => 'b', 'c' => 'd')

FYI:我需要這使自定義json_encode功能

+3

的可能重複的[PHP陣列:一個好方法,以檢查是否一個數組是締合或順序?](http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check -if-an-array-is-associative-or-sequential)爲什麼你需要構建一個自定義的'json_encode'函數?你在沒有它的PHP版本嗎?這種情況下有預製包裝。 – 2011-03-25 11:26:07

+0

'json_encode'的實現可供下載,因此可能檢查並定製它們?這裏有一個:http://www.boutell.com/scripts/jsonwrapper.html – Joost 2011-03-25 11:27:56

+0

@Pekka我需要能夠從PHP文件 – Teneff 2011-03-25 11:28:43

回答

12
function is_assoc($array){ 
    return array_values($array)!==$array; 
} 

注意,它也將如數組索引返回TRUE但包含孔或不從0開始,或者按鍵沒有排序。我通常更喜歡使用這個功能,因爲它提供了最好的性能。 至於這些情況下,我更喜歡這種替代(只是要記住,它比上面的要慢近4次):

function is_assoc($array){ 
    return !ctype_digit(implode('', array_keys($array))); 
} 

使用ksort()作爲Rinuwise評論是有點慢。

+3

請注意,如果數組鍵不在數組中,則這不起作用。如果不需要,可以通過在比較之前對陣列執行ksort()來避免。 – Riimu 2011-03-25 11:34:04

+0

感謝您的評論。這些情況我改善了我的答案。 – Slava 2011-03-25 11:56:47

+0

如果按鍵像「080」這樣會出錯。示例數組('0'=> 1,'08'=> 2); – ZigZag 2012-05-10 10:05:20