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

PHP使用uksort实现分段字符串键的自定义升序排序需求

解决方案:用uksort实现自定义键排序

直接用uksort配合自定义比较回调就能实现需求,核心是把键分割成整数后再比较,避免字符串排序的问题。以下是完整示例:

// 你的目标数组(示例结构)
$targetArray = [
    '20-2' => (object)['data' => '内容20-2'],
    '3-1' => (object)['data' => '内容3-1'],
    '20-1' => (object)['data' => '内容20-1'],
    '4-1' => (object)['data' => '内容4-1'],
];

// 执行自定义键排序
uksort($targetArray, function($keyA, $keyB) {
    // 将键分割为两段并转为整数
    list($partA1, $partA2) = array_map('intval', explode('-', $keyA));
    list($partB1, $partB2) = array_map('intval', explode('-', $keyB));

    // 优先比较第一段整数,相同则比较第二段
    if ($partA1 !== $partB1) {
        return $partA1 - $partB1;
    }
    return $partA2 - $partB2;
});

// 验证排序结果
print_r($targetArray);

关键说明:

  • uksort专门针对数组键做自定义排序,完全符合你的需求,不需要修改原数组的创建逻辑
  • 用explode('-', $key)分割键后,通过intval转为整数,彻底解决字符串排序的偏差(比如字符串"20"会比"3"排在前面,转成整数后就能按数值大小正确排序)
  • 比较逻辑严格遵循你的要求:先按第一段升序,第一段相同则按第二段升序
  • PHP7完全支持上述语法(匿名函数、list()解构、array_map用法都没问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:43:15