如何在php中对负值降序的关联数组进行排序?

时间:2014-09-20 06:57:06

标签: php arrays sorting

我正在网上考试网站上工作。在这里我有一个关联数组,其中键作为子部分的名称,值作为相应子部分的得分。所以我想根据值按降序对该数组进行排序。但我的价值观是消极的。我已经使用arsort函数按值对关联数组进行排序,但它不适用于负值。实际上,我希望首先显示分数最低的小节。我提供我的代码。请帮我解决这个问题。

Array
(
    [sentence-equivalence] => -6
    [reading-comprehension] => -16
    [text-completion] => -20
    [algebra] => -24
    [geometry] => -26
    [arithmetic] => -31
    [common-data] => -37
    [statistics] => -38
)

2 个答案:

答案 0 :(得分:2)

您可以分别使用usortarray_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);