2

我的网站上有一个民意调查。为此,我将结果放入一个数组中,如下所示:

[Answer1] => "0",
[Answer2] => "1",
[Answer3] => "0",
[Answer4] => "0"

选择是关键,票数是价值。基本上,当结果显示我想按票数排序,然后也保持相同的排序。因此,如果没有投票,它将按顺序显示:

Answer1
Answer2
Answer3
Answer4

但是,“Answer2”有 1 票,它会显示:

Answer2
Answer1
Answer3
Answer4

我曾尝试创建自定义 usort 函数,但没有运气。
任何人都可以帮我解释如何做的逻辑(我可以自己做PHP)吗?

4

4 回答 4

2

当您使用关联数组时,您正在寻找的东西称为稳定排序。PHP 的标准数组排序函数使用不稳定的快速排序实现,因此您发现它们在这里对您没有帮助。

您可以使用array_multisort. 通过对valuekey进行排序。

使用您当前拥有的数据结构,您无法使用任何 u*sort 函数执行此操作,但是如果您修改了数据结构并添加了另一个维度,使其看起来像以下那样,那么您可以:

array( 
  array( 
    'answer' => 1, 
    'votes' => 0, 
  ), 
  array( 
    'answer' => 2, 
    'votes' => 1, 
  ), 
) 

所以本质上,比较函数只需要考虑两个子索引。

希望有帮助

于 2013-02-18T12:49:09.773 回答
1

你想要 php 函数“asort”:

http://uk.php.net/manual/en/function.asort.php

它对数组进行排序,维护索引关联。

我刚刚注意到您使用的是标准数组(非关联)。如果您不关心保留索引关联,请使用 sort():

http://uk.php.net/manual/en/function.sort.php

于 2013-02-18T12:48:37.857 回答
-1

看起来我误读了这个问题。

asort() 将按值对数组进行排序,因此最高票数将排在数组的首位。因此结果将是:

[Answer2] => "1",
[Answer1] => "0",
[Answer3] => "0",
[Answer4] => "0"

或者更完整的例子

[Answer2] => "42",
[Answer3] => "29",
[Answer1] => "18",
[Answer4] => "9"

于 2013-02-18T12:52:55.343 回答
-1

我认为 asort() 会工作..

asort($your_array);
于 2013-02-18T12:54:04.183 回答