先按相反的数字对数组进行排序,然后按字母顺序排列


Sort an array first by reverse number, then alphabetical?

我有一个数组,它有一个带编号的键,后面跟着一个名称,语法如下:

[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)
}