PHP 将所有数组视为关联数组,因此没有任何内置函数。任何人都可以推荐一种相当有效的方法来检查数组是否“是一个列表”(只包含从0开始的数字键)?
基本上,我希望能够区分这一点:
$sequentialArray = [
'apple', 'orange', 'tomato', 'carrot'
];
和这个:
$assocArray = [
'fruit1' => 'apple',
'fruit2' => 'orange',
'veg1' => 'tomato',
'veg2' => 'carrot'
];
Answer recommended by
PHP /collectives/php
Collective
由于 8.1 PHP 有一个简单的答案,array_is_list() https://www.php.net/manual/en/function.array-is-list.php.
对于遗留代码,您可以使用以下函数(将其包装在function_exists()
使其便携):
if (!function_exists('array_is_list')) {
function array_is_list(array $arr)
{
if ($arr === []) {
return true;
}
return array_keys($arr) === range(0, count($arr) - 1);
}
}
然后您就可以在任何 PHP 版本中使用此函数。
var_dump(array_is_list([])); // true
var_dump(array_is_list(['a', 'b', 'c'])); // true
var_dump(array_is_list(["0" => 'a', "1" => 'b', "2" => 'c'])); // true
var_dump(array_is_list(["1" => 'a', "0" => 'b', "2" => 'c'])); // false
var_dump(array_is_list(["a" => 'a', "b" => 'b', "c" => 'c'])); // false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)