我想按降序对一组数字进行排序(同时保持索引)。
问题是,如果有重复的值,我希望它们按第二个数组中的匹配值排序。
例如,如果数组是:
0 => 13,
1 => 21,
2 => 15,
3 => 21
第二个数组是:
0 => 3,
1 => 2,
2 => 7,
3 => 4
然后我希望3 => 21
来1 => 21
之前,因为第二个数组中索引3
的匹配值大于索引1
({{1} }})。
所以最终排序的数组将是:
4 > 2
其实际目的如下:
图一个民意调查。每个用户都必须将选项从1到X排名(X =选项数)。
如果用户将答案排名为第一个排名,则获得X分,第二个获得X-1,依此类推。
所以第一个数组实际上是每个选项的得分(索引是选项的id)。
第二个数组是首先对选项进行排名的用户数(索引是选项的id,与第一个数组中的索引匹配)。
因此,当有两个或更多选项具有相同分数时,排名较高的选项排名较高。
希望这是有道理的 谢谢!
答案 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”)来绕过重新索引。