在 PHP 后端处理从数据库或 API 获取的列表数据时,使用 array_multisort() 对关联数组按某一字符串字段排序,默认会遵循 ASCII 码顺序(大写字母 A-Z 排在小写字母 a-z 前面)。本文介绍如何实现自然语言习惯的不区分大小写排序。
一、 核心方案:SORT_STRING | SORT_FLAG_CASE 标志组合
<?php
$users = [
['name' => 'apple', 'score' => 85],
['name' => 'Banana', 'score' => 92],
['name' => 'cat', 'score' => 78],
['name' => 'Dog', 'score' => 90]
];
// 提取待排序字段的列数组
$names = array_column($users, 'name');
// 使用 SORT_STRING 与 SORT_FLAG_CASE 组合标志进行不区分大小写升序排序
array_multisort($names, SORT_ASC, SORT_STRING | SORT_FLAG_CASE, $users);
print_r($users);
?>二、 现代 PHP 替代方案:usort + strcasecmp
在现代 PHP 7.4+ / 8.x 中,使用 usort() 配合 strcasecmp() 语法更加直观、内聚:
usort($users, fn($a, $b) => strcasecmp($a['name'], $b['name']));