如何在PHP中按另一个数组对数组的重复值进行排序?

时间:2011-02-15 18:28:59

标签: php arrays sorting

我想按降序对一组数字进行排序(同时保持索引)。

问题是,如果有重复的值,我希望它们按第二个数组中的匹配值排序。

例如,如果数组是:

0 => 13, 
1 => 21, 
2 => 15, 
3 => 21

第二个数组是:

0 => 3, 
1 => 2, 
2 => 7, 
3 => 4

然后我希望3 => 211 => 21之前,因为第二个数组中索引3的匹配值大于索引1({{1} }})。 所以最终排序的数组将是:

4 > 2

其实际目的如下:

图一个民意调查。每个用户都必须将选项从1到X排名(X =选项数)。

如果用户将答案排名为第一个排名,则获得X分,第二个获得X-1,依此类推。

所以第一个数组实际上是每个选项的得分(索引是选项的id)。

第二个数组是首先对选项进行排名的用户数(索引是选项的id,与第一个数组中的索引匹配)。

因此,当有两个或更多选项具有相同分数时,排名较高的选项排名较高。

希望这是有道理的 谢谢!

2 个答案:

答案 0 :(得分:0)

将其转换为:

$a = array(
    0 => array(13, 3), 
    1 => array(21, 2),
    2 => array(15, 7),
    3 => array(21, 4)
);

然后使用arsort($a) 更多信息:http://php.net/manual/en/function.arsort.php

答案 1 :(得分:0)

如果我理解正确,您只需要:

array_multisort($array1, $array2);

不好的一点是,如果您使用索引数组,它们将被重新编制索引。您的示例变为:array(13, 15, 21, 21)array(3, 2, 4, 7)

您可以通过在每个键上添加一些字符(例如,“0”或“x”)来绕过重新索引。