判断数组是否有序需遍历相邻元素,设$asc和$desc标志,遇$arr[$i]>$arr[$i+1]则$asc=false,遇$arr[$i]

直接判断一个数组是否有序,核心是检查相邻元素是否始终满足升序或降序关系。PHP 7.1 没有内置的 is_sorted() 函数,需手动实现,但逻辑清晰、性能好,且不依赖额外排序操作。
升序或降序任一满足即为有序
最实用的判断方式是同时检测升序和降序可能性,一趟遍历即可得出结论。适用于索引数组和关联数组(只要键顺序按插入顺序保留,值比较不受影响):
- 设两个布尔标志
$asc = true和$desc = true - 从第 0 位开始,逐对比较
$arr[$i]与$arr[$i+1] - 若出现
$arr[$i] > $arr[$i+1],说明不满足升序,置$asc = false - 若出现
$arr[$i] ,说明不满足降序,置 <code>$desc = false - 循环结束后,只要
$asc || $desc为真,数组就是有序的(含全等元素的数组也视为有序)
只判断严格升序(不含相等)
若业务要求“严格递增”(如 ID 序列),则不允许重复值:
- 遍历中一旦发现
$arr[$i] >= $arr[$i+1],立即返回false - 空数组或单元素数组默认返回
true - 注意:PHP 7.1 中整数与字符串混合比较可能触发隐式转换,建议提前用
is_numeric()或类型断言统一处理
兼容关联数组与稀疏索引
PHP 数组本质是有序映射表,键名不影响值的顺序判断。但遍历时不能依赖 for($i=0; $i<count>,因为关联数组或稀疏索引可能导致跳过或报错:</count>
- 推荐用
array_values()提取纯值再判断,确保下标连续:$vals = array_values($arr) - 或改用
foreach配合引用键获取前后元素,例如用array_keys()获取键序列后双指针比对 - 对含非数值键或 null 键的数组,
array_values()是最稳妥的预处理方式
边界情况必须处理
以下情形在 PHP 7.1 中常见,不处理易导致误判或警告:
- 空数组
[]和单元素数组(如[42])应视为有序 - 全相同元素(如
[5,5,5])属于非严格升序 & 非严格降序,应返回true - 含
null、false、字符串数字(如"10"vs2)时,建议统一转为整型或使用strcmp()等显式比较函数 - 避免对非数组变量调用,务必前置
is_array($arr)校验
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











