2011-03-25 71 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