我正在网上考试网站上工作。在这里我有一个关联数组,其中键作为子部分的名称,值作为相应子部分的得分。所以我想根据值按降序对该数组进行排序。但我的价值观是消极的。我已经使用arsort函数按值对关联数组进行排序,但它不适用于负值。实际上,我希望首先显示分数最低的小节。我提供我的代码。请帮我解决这个问题。
Array
(
[sentence-equivalence] => -6
[reading-comprehension] => -16
[text-completion] => -20
[algebra] => -24
[geometry] => -26
[arithmetic] => -31
[common-data] => -37
[statistics] => -38
)
答案 0 :(得分:2)
您可以分别使用usort和array_reverse,或者如果您更喜欢一种方法,那么您可以使用uasort并传递自己的比较器功能。以下是示例。希望有所帮助。
$array = array(
'sentence-equivalence' => -6,
'reading-comprehension' => -16,
'text-completion' => -20,
'algebra' => -24,
'arithmetic' => -31,
'geometry' => -26,
'common-data' => -37,
'statistics' => -38,
);
asort($array, SORT_NUMERIC);
$array = array_reverse($array, true); // true stands for preserve keys.
var_dump($array);
// Otherwise you might also use uasort:
uasort($array, function($a, $b) {
return $a < $b;
});
答案 1 :(得分:0)
使用array_multisort
并将第二个参数作为SORT_DESC
传递。试试这个
$s = Array
(
'sentence-equivalence' => -6,
'reading-comprehension' => -16,
'text-completion' => -20,
'algebra' => -24,
'arithmetic' => -31,
'geometry' => -26,
'common-data' => -37,
'statistics' => -38,
);
array_multisort($s, SORT_DESC); //array_multisort($s, SORT_ASC); for ascending order
print '<pre>';
print_r($s);