我有一个数组,它有一个带编号的键,后面跟着一个名称,语法如下:
[50-Aname] => arraydata
[45-Anothername] => arraydata
[45-Bname] => arraydata
[30-Cname] => arraydata
通过使用krsort(),我可以将数组排序为高分表(倒计数)。但这意味着,如果它们有相同的数字,Bname将出现在Anothername之前,因为它也按字母顺序反向排列。
那么,有没有一种方法可以将数字从大到小排序,但也可以按字母顺序排序?
您可以使用uksort()
并将一个函数定义为键的比较器,根据该比较器进行排序。
简而言之,该函数应该用"-"分隔键,然后使用这两个组件创建一个总订单。
uksort
文件:http://www.php.net/manual/en/function.uksort.php
对于这种类型的问题,我会把这些数据放在数据库中并进行排序
mysql_query("SELECT * FROM table_name ORDER BY score DESC, name ASC");
在该数组结构上使用ksort()
可以产生您想要的结果。我运行的是PHP v.3.13。
$to_be_sorted = array(
"50-Aname" => 123,
"45-Bname" => 123,
"45-Cname" => 123,
"45-Anothername" => 123,
"30-Cname" => 123
);
ksort($to_be_sorted);
var_dump($to_be_sorted);
结果:
array(5) {
["30-Cname"]=>
int(123)
["45-Anothername"]=>
int(123)
["45-Bname"]=>
int(123)
["45-Cname"]=>
int(123)
["50-Aname"]=>
int(123)
}