1

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

[50-Aname] => arraydata
[45-Anothername] => arraydata
[45-Bname] => arraydata
[30-Cname] => arraydata

通过使用 krsort(),我可以将数组排序为高分表(倒数)。但这意味着,如果它们具有相同的编号,则 Bname 将出现在 Anothername 之前,因为它也按字母顺序倒序排列。

那么,有没有办法将数字从大到小排序,但也可以按字母顺序排序?

4

3 回答 3

2

您可以使用uksort()和定义一个函数作为键的比较器,基于该比较器进行排序。

简而言之,该函数应该用“-”拆分键,然后使用 2 个组件创建一个总订单。

的文档uksorthttp ://www.php.net/manual/en/function.uksort.php

于 2012-08-19T23:22:54.260 回答
1

对于这种类型的问题,我会将这些数据放入数据库并对其进行排序。

 mysql_query("SELECT * FROM table_name ORDER BY score DESC, name ASC");
于 2012-08-20T00:16:44.383 回答
0

在该数组结构上使用ksort()会产生您想要的。我正在运行 PHP v5.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)
}
于 2012-08-19T23:33:53.810 回答