我正在创建一个CSS图表,根据数值列出从最高到最低的项目。问题是" rsort"似乎只计算前5位数(或者看起来似乎)。这导致它显示的项目高于其他数字低于100,000。此问题的示例如下:
$ITEM_1 = "95000";
$ITEM_2 = "103000";
..
$item_rank[]= "<li>$ITEM_1 Item 1</li>";
$item_rank[]= "<li>$ITEM_2 Item 2</li>";
..
rsort($item_rank); // sort highest numbers to lowest
echo "<ul>";
echo $item_rank[0];
echo $item_rank[1];
..
echo "</ul>";
在这种情况下,第1项实际上是较低的数字,但它排名较高,因为任何超过100,000的项目都会被处理得更低。有办法解决这个问题吗?
答案 0 :(得分:4)
我相信你应该使用natsort()。当您尝试对视为字符串的数字进行排序时会发生这种情这是一个例子:
$a=array('1a','2a','3a','10a','15a');
rsort($a);
echo implode(',',$a); // outputs 3a,2a,1a,15a,10a
但是你期待这样的输出:
15a,10a,3a,2a,1a
为此,请使用natsort和array_reverse():
$a=array('1a','2a','3a','10a','15a');
natsort($a);
$a=array_reverse($a);
echo implode(',',$a); // outputs 15a,10a,3a,2a,1a
答案 1 :(得分:1)
由于$ item_rank数组具有字符串值,因此rsort将按字母顺序对其进行排序。在字母顺序反向排序中,“2”将在“10”之前出现,即使10&gt; 2.
您需要为此类排序实现natsort。检查 - http://us3.php.net/manual/en/function.natsort.php
来自php.net的例子:
<?php
$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
asort($array1);
echo "Standard sorting\n";
print_r($array1);
natsort($array2);
echo "\nNatural order sorting\n";
print_r($array2);
?>
Standard sorting
Array
(
[3] => img1.png
[1] => img10.png
[0] => img12.png
[2] => img2.png
)
Natural order sorting
Array
(
[3] => img1.png
[2] => img2.png
[1] => img10.png
[0] => img12.png
)