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
相关产品推荐
相关产品推荐

