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

PHP如何按数组键的第3个字符开始进行排序?

PHP关联数组按键的指定子串排序

问题场景

现有如下PHP关联数组:

$arr = [
    'D.Fletcher' => [
        'games' => 2,
        'ab' => 6,
        'runs' => 2,
        'hits' => 2
    ],
    'A.Slegers' => [
        'games' => 3,
        'ab' => 0,
        'runs' => 0,
        'hits' => 0
    ],
    'A.Eaton' => [
        'games' => 1,
        'ab' => 2,
        'runs' => 0,
        'hits' => 0
    ],
    'S.Ohtani' => [
        'games' => 3,
        'ab' => 6,
        'runs' => 2,
        'hits' => 3
    ]
];

需要按数组键的第3个字符开始的子串排序。直接用ksort()得到的结果是:

A.Eaton
A.Slegers
D.Fletcher
S.Ohtani

但期望的排序结果(对应SQL语句SELECT * FROM batters ORDER BY SUBSTRING(name, 3)的效果)是:

A.Eaton
D.Fletcher
S.Ohtani
A.Slegers

实现方案

使用PHP的uksort()函数,它支持自定义数组键的比较规则,完美匹配需求:

// 自定义键排序逻辑
uksort($arr, function($key1, $key2) {
    // 截取键的第3个字符开始的子串(PHP字符串索引从0开始,第3个字符对应索引2)
    $subKey1 = substr($key1, 2);
    $subKey2 = substr($key2, 2);
    // 按子串的字典序比较
    return strcmp($subKey1, $subKey2);
});

// 验证排序结果
foreach ($arr as $key => $_) {
    echo $key . PHP_EOL;
}

代码说明

  • uksort():专门用于关联数组的键排序,回调函数负责定义两个键的比较规则
  • substr($key, 2):截取从第3个字符开始的子串(索引2对应第3个字符)
  • strcmp():比较两个字符串的字典序,返回值用于告诉uksort()两个键的大小关系

执行上述代码后,输出的键顺序与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:46:19