You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP usort()半大小写敏感排序:strcasecmp替代方案咨询

解决大小写敏感的自定义排序问题

你当前用strcasecmp()的问题在于:当两个字符串仅大小写不同时,strcasecmp()会返回0,此时usort()的排序是不稳定的,导致顺序随机。要实现同内容时大写开头项优先的需求,需要在不区分大小写比较的基础上,增加一层区分大小写的二次比较。

替代方案代码

usort($users, function($a, $b) {
    // 第一步:不区分大小写比较内容
    $caseInsensitive = strcasecmp($a['first_name'], $b['first_name']);
    if ($caseInsensitive !== 0) {
        return $caseInsensitive;
    }
    // 第二步:内容相同时,区分大小写比较,确保大写在前
    return strcmp($a['first_name'], $b['first_name']);
});

逻辑说明

  1. 先用strcasecmp()做不区分大小写的排序,确保Amy、amy被归为同一组,同时Rebecca、stacy按字母顺序排列。
  2. 当strcasecmp()返回0(即内容忽略大小写后相同),再用strcmp()做区分大小写的比较:由于大写字母的ASCII值小于小写字母(例如'A'=65,'a'=97),strcmp('Amy', 'amy')会返回负数,使得大写开头的项排在前面。

执行后预期结果

[
    ['first_name' => 'Amy'],
    ['first_name' => 'amy'],
    ['first_name' => 'Rebecca'],
    ['first_name' => 'stacy']
]

内容的提问来源于stack exchange,提问作者Lloyd Banks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:07:18