Web开发与WP

PHP array_multisort 多维数组不区分大小写排序的实现方案

在 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']));