登录
首页 >  文章 >  php教程

PHP数组排序面试题攻略与技巧

时间:2026-03-23 20:36:52 268浏览 收藏

PHP数组排序看似基础,实则暗藏玄机——面试官常借此考察你对键值保留逻辑、排序方向、多维结构及中文本地化等关键细节的精准把握;从sort/asort/ksort的适用场景,到usort回调函数返回值的易错陷阱,再到array_multisort高效处理多维数组的技巧,以及mb_strcoll配合setlocale解决中文乱序的实战方案,每一步都直击开发中的真实痛点与高频踩坑点。

PHP 数组排序相关面试题全面解析

PHP 数组排序函数怎么选?关键看键值是否保留

PHP 提供了多个排序函数,核心区别在于是否保留原始键名(key)以及按什么规则排序。面试常考你能否根据需求快速匹配正确函数。

记住这张简表就能应对大部分问题:

  • sort():数值索引数组升序,重排键名(变成 0,1,2…)
  • asort():关联数组升序,保留键名(按值排,键随值走)
  • ksort():关联数组升序,按键名排(字符串键按字母,数字键转字符串比较)
  • rsort() / arsort() / krsort():对应上面三个的降序版本
  • usort() / uasort() / uksort():自定义比较逻辑,必须传入回调函数

usort 自定义排序怎么写?重点在返回值含义

很多人写错 usort,不是语法问题,而是没理解回调函数的返回值逻辑。它接收两个参数 $a 和 $b,必须返回整数:

  • 返回 < 0:表示 $a 应该排在 $b 前面(升序)
  • 返回 > 0:表示 $a 应该排在 $b 后面(降序)
  • 返回 0:表示两者相等,顺序不变

常见错误写法:return $a > $b; —— 这返回布尔值,在 PHP 中会被转成 1 或 0,导致降序失效或乱序。正确写法是:return $a - $b;(数值)或 return strcmp($a, $b);(字符串)。

多维数组排序怎么做?array_multisort 是隐藏高手

直接用 usort 能解决,但效率低、代码长。面试官更想看你是否知道 array_multisort 这个“组合排序”函数。

它本质是把某一列抽出来当参考序列,再按这个序列对整个数组重排。例如按 users 数组中的 age 升序、name 降序:

$ages = array_column($users, 'age');
$names = array_column($users, 'name');
array_multisort($ages, SORT_ASC, $names, SORT_DESC, $users);

注意:array_multisort 会直接修改原数组,且所有参数长度需一致,否则可能出错。它比多次 usort 更高效,也更易读。

中文字符串排序为什么乱?mb_strcoll 才是正解

直接用 sort 或 strcmp 排中文,结果常是乱序——因为默认按 ASCII 码,而中文 UTF-8 编码高位字节大,排序就错乱。

正确方式是使用支持本地化的比较函数:

  • 设置本地环境:setlocale(LC_COLLATE, 'zh_CN.UTF-8');
  • mb_strcoll() 替代 strcmp(需开启 mbstring 扩展)
  • 在 usort 回调中这样写:return mb_strcoll($a['name'], $b['name']);

不设 locale 或不用 mb_ 系列函数,中文排序基本不可靠。这点在处理用户昵称、城市名等业务场景时极易踩坑。

到这里,我们也就讲完了《PHP数组排序面试题攻略与技巧》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>