📅  最后修改于: 2023-12-03 15:24:34.014000             🧑  作者: Mango
在 PHP 中,数组可以分为两种类型:关联数组和顺序数组,它们有不同的表示方式和访问方式。本文将介绍如何在 PHP 中通过代码检查一个数组是关联的还是顺序的。
顺序数组的键名是数字,按照顺序排列,可以使用数字或者数组下标来访问对应的值。
$numbers = array(2, 4, 6, 8);
echo $numbers[0]; // 输出 2
echo $numbers[1]; // 输出 4
echo $numbers[2]; // 输出 6
echo $numbers[3]; // 输出 8
而关联数组的键名是字符串,可以自定义,可以使用键名来访问对应的值。
$grades = array("Bob"=>98, "Jim"=>88, "Lucy"=>78);
echo $grades["Bob"]; // 输出 98
echo $grades["Jim"]; // 输出 88
echo $grades["Lucy"]; // 输出 78
我们可以使用 PHP 的 array_values()
函数和 array_keys()
函数来判断一个数组是关联的还是顺序的。
如果一个数组键名不是数字,那么它就是关联数组。我们可以使用 array_keys()
函数获取数组的所有键名,然后判断键值中是否存在字符串类型的键名。
function is_assoc_array($arr)
{
return count(array_filter(array_keys($arr), 'is_string')) > 0;
}
$grades = array("Bob"=>98, "Jim"=>88, "Lucy"=>78);
var_dump(is_assoc_array($grades)); // 输出 bool(true)
$numbers = array(2, 4, 6, 8);
var_dump(is_assoc_array($numbers)); // 输出 bool(false)
我们定义了一个 is_assoc_array()
函数,该函数会使用 array_keys()
函数获取数组的所有键名,然后使用 array_filter()
函数过滤出其中的字符串键名,最后判断字符串键名的数量是否大于 0 即可。
如果一个数组的键名是数字并且是连续的,那么它就是顺序数组。我们可以使用 array_values()
函数获取数组的所有值,然后判断它们的键名是否连续。
function is_index_array($arr)
{
return array_keys($arr) === range(0, count($arr) - 1);
}
$numbers = array(2, 4, 6, 8);
var_dump(is_index_array($numbers)); // 输出 bool(true)
$grades = array("Bob"=>98, "Jim"=>88, "Lucy"=>78);
var_dump(is_index_array($grades)); // 输出 bool(false)
我们定义了一个 is_index_array()
函数,该函数会使用 array_keys()
函数获取数组的所有键名,然后使用 range()
函数生成一个连续的数字数组,最后判断两个数组是否相同即可。
本文介绍了如何在 PHP 中检查数组是关联的还是顺序的,我们可以使用 array_keys()
函数和字符串类型的键名来判断一个数组是否为关联数组,使用 array_values()
函数和连续的数字数组来判断一个数组是否为顺序数组。在实际开发中,我们可以根据数组的类型使用不同的方式来访问、处理它们的数据。