我的网站上有一项民意调查。为此我将结果放入如下数组:
[Answer1] => "0",
[Answer2] => "1",
[Answer3] => "0",
[Answer4] => "0"
选择是关键,投票数是值。基本上当结果显示我想按投票数排序然后也保持相同的排序。因此,如果没有投票,它将在订单中显示:
Answer1
Answer2
Answer3
Answer4
但是,如果“Answer2”有1票,它会显示:
Answer2
Answer1
Answer3
Answer4
我尝试过创建一个自定义的函数但是没有运气 任何人都可以帮我解释如何做到这一点(我可以自己做PHP)吗?
答案 0 :(得分:2)
当您使用关联数组时,您要查找的内容称为稳定排序。 PHP的标准数组排序函数使用了一个不稳定的快速排序实现,因为你发现它们对你没有帮助。
您可以使用array_multisort
完成此操作。通过两个方式排序值和键。
使用您的数据结构,您目前无法使用任何u *排序功能执行此操作但是如果您修改了数据结构并添加了另一个维度,使其看起来如下所示,那么您可以:
array(
array(
'answer' => 1,
'votes' => 0,
),
array(
'answer' => 2,
'votes' => 1,
),
)
所以基本上比较函数只需要考虑两个子索引。
希望有所帮助
答案 1 :(得分:1)
你想要php函数“asort”:
http://uk.php.net/manual/en/function.asort.php
它对数组进行排序,维护索引关联。
我刚刚注意到你正在使用标准数组(非关联)。如果您不想保留索引关联,请使用sort():
答案 2 :(得分:-1)
看起来我误解了这个问题。
asort()将按值对数组进行排序,因此最高投票数将位于数组中。 因此结果将是:
[Answer2] => "1",
[Answer1] => "0",
[Answer3] => "0",
[Answer4] => "0"
或更完整的例子
[Answer2] => "42",
[Answer3] => "29",
[Answer1] => "18",
[Answer4] => "9"
答案 3 :(得分:-1)
我认为asort()会起作用..
asort($your_array);