$arr = [
[3,'c'],
[3,'f'],
[3,'d'],
[3,'k'],
[3,'a'],
[7,'b'],
[7,'k'],
[1,'v'],
[4,'a'],
[2,'e'],
[2,'a'],
];
foreach ($arr as $key => $r ) {
$a[$key] = $r[0];
$b[$key] = $r[1];
}
array_multisort($a, SORT_ASC, $b, SORT_DESC, $arr);
echo '<pre>';
print_r($arr);
结果如下:
Array
(
[0] => Array
(
[0] => 1
[1] => v
)
[1] => Array
(
[0] => 2
[1] => e
)
[2] => Array
(
[0] => 2
[1] => a
)
[3] => Array
(
[0] => 3
[1] => k
)
[4] => Array
(
[0] => 3
[1] => f
)
[5] => Array
(
[0] => 3
[1] => d
)
[6] => Array
(
[0] => 3
[1] => c
)
[7] => Array
(
[0] => 3
[1] => a
)
[8] => Array
(
[0] => 4
[1] => a
)
[9] => Array
(
[0] => 7
[1] => k
)
[10] => Array
(
[0] => 7
[1] => b
)
)
以下是JS:
var arr = [
[3,'c'],
[3,'f'],
[3,'d'],
[3,'k'],
[3,'a'],
[7,'b'],
[7,'k'],
[1,'v'],
[4,'a'],
[2,'e'],
[2,'a'],
];
arr.sort((a, b) => a[0] - b[0] || b[1].localeCompare(a[1]));
console.log(arr);
得出的结果跟上面的PHP方法是一样的。这里有个localeCompare,它的主要作用就是比较两个字符串的顺序,然后返回一个(-1, 0, 1)之间的数字。
sort
可以对数字以及英文单词实现排序,结合 localeCompare
就可以实现中文排序
const arr = ['刘一','陈二','张三','李四' ,'王五' ,'赵六' ,'孙七','周八','吴九','郑十']
arr.sort(function (a, b) {
return a.localeCompare(b, 'zh-Hans-CN', { sensitivity: 'accent' })
})
//也可以下面这样写
//arr.sort((a, b) => a.localeCompare(b, 'zh-Hans-CN', { sensitivity: 'accent' }));
// 结果输出
// ['陈二', '李四', '刘一', '孙七', '王五', '吴九', '张三', '赵六', '郑十', '周八']
localeCompare 属性
zh-Hans-CN
是简体中文的排序规则
sensitivity
是灵敏度,包括 base、accent、case、variant这几种灵敏度
语法:
localeCompare(compareString)
localeCompare(compareString, locales)
localeCompare(compareString, locales, options)
在不同的语言下 localeCompare()
所提供的结果是不一致的。为了能让用户得到正确的比较值,通过使用 locales
参数来提供要比较的语言(可能还需要设置某些回退语言),如zh-Hans-CN, en, de等
localeCompare()详细参考:https://developer.mozilla.org/zh-CN/