2014-09-20 107 views
0

我正在在线考试网站上工作。在这个我有一个关键数组的关键作为小节的名称和值作为分数在各自的小节。所以我想按照值降序排列该数组。但我的价值观是负面的。我已经使用arsort函数按值排序关联数组,但它不适用于负值。实际上,我想展示第一个具有最低分数的小节。我正在提供我的代码。请帮我解决这个问题。如何排序在php中具有负值递减的关联数组?

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

我不明白为什么它不应该在负值上工作。显示你的尝试。 – 2014-09-20 07:14:24

+0

[如何通过PHP中给定键的值对关联数组的数组进行排序](http://stackoverflow.com/questions/1597736/how-to-sort-an-array-of-associative-arrays -by-given-a-key-in-php) – 2014-09-20 09:36:50

+0

WTH?您已将您的问题替换为关于PHP的百科全书条目的一部分?!? – 2014-09-20 11:47:30

回答

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; 
}); 
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);