$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/