PHP 将所有数组视为关联数组,因此没有任何内置函数。谁能推荐一种相当有效的方法来检查数组是否仅包含数字键?
基本上,我希望能够区分这一点:
$sequentialArray = [ 'apple', 'orange', 'tomato', 'carrot' ];
和这个:
$assocArray = [ 'fruit1' => 'apple', 'fruit2' => 'orange', 'veg1' => 'tomato', 'veg2' => 'carrot' ];
您问了两个不太等价的问题:
考虑一下您真正需要哪些行为。(可能两者都可以满足您的目的。)
第一个问题(简单地检查所有键是否都是数字)。 仅检查数组是否具有非整数键(而不是数组是顺序索引还是零索引):
function has_string_keys(array $array) { return count(array_filter(array_keys($array), 'is_string')) > 0; }
如果至少有一个字符串键,$array将被视为一个关联数组。
$array
对于第二个问题(检查数组是否是零索引和顺序的),您可以使用以下函数:
function isAssoc(array $arr) { if (array() === $arr) return false; return array_keys($arr) !== range(0, count($arr) - 1); } var_dump(isAssoc(['a', 'b', 'c'])); // false var_dump(isAssoc(["0" => 'a', "1" => 'b', "2" => 'c'])); // false var_dump(isAssoc(["1" => 'a', "0" => 'b', "2" => 'c'])); // true var_dump(isAssoc(["a" => 'a', "b" => 'b', "c" => 'c'])); // true