📜  如何在PHP检查数组是关联的还是顺序的?(1)

📅  最后修改于: 2023-12-03 15:24:34.014000             🧑  作者: Mango

如何在PHP检查数组是关联的还是顺序的?

在 PHP 中,数组可以分为两种类型:关联数组和顺序数组,它们有不同的表示方式和访问方式。本文将介绍如何在 PHP 中通过代码检查一个数组是关联的还是顺序的。

1. 什么是关联数组和顺序数组?

顺序数组的键名是数字,按照顺序排列,可以使用数字或者数组下标来访问对应的值。

$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
2. 如何检查数组是关联的还是顺序的?

我们可以使用 PHP 的 array_values() 函数和 array_keys() 函数来判断一个数组是关联的还是顺序的。

2.1 判断数组是否为关联数组

如果一个数组键名不是数字,那么它就是关联数组。我们可以使用 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 即可。

2.2 判断数组是否为顺序数组

如果一个数组的键名是数字并且是连续的,那么它就是顺序数组。我们可以使用 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() 函数生成一个连续的数字数组,最后判断两个数组是否相同即可。

3. 总结

本文介绍了如何在 PHP 中检查数组是关联的还是顺序的,我们可以使用 array_keys() 函数和字符串类型的键名来判断一个数组是否为关联数组,使用 array_values() 函数和连续的数字数组来判断一个数组是否为顺序数组。在实际开发中,我们可以根据数组的类型使用不同的方式来访问、处理它们的数据。