PHP实现二维数组按列排序:负数优先,再按绝对值降序
PHP数组自定义排序实现指定规则
原数组
$originalArray = [ ['array-5', 0], ['array-4', 0], ['array-1', -1], ['array-3', 2], ['array-2', 3] ];
排序要求
- 负数排在正数之前
- 符号相同时,按数值的绝对值从大到小排序
- 数值绝对值相同时(如两个0),按元素第一个字符串字段升序排列
实现代码
usort($originalArray, function($a, $b) { $valA = $a[1]; $valB = $b[1]; // 负数优先排在非负数前 $isNegA = $valA < 0; $isNegB = $valB < 0; if ($isNegA && !$isNegB) return -1; if (!$isNegA && $isNegB) return 1; // 符号相同,按绝对值降序排序 $absA = abs($valA); $absB = abs($valB); $absCmp = $absB <=> $absA; if ($absCmp !== 0) return $absCmp; // 绝对值相同,按第一个字符串字段升序排列 return strcmp($a[0], $b[0]); }); // 输出结果 print_r($originalArray);
运行结果
[ ['array-1', -1], ['array-2', 3], ['array-3', 2], ['array-4', 0], ['array-5', 0] ]
内容的提问来源于stack exchange,提问作者matin
相关产品推荐
相关产品推荐

