4

我正在创建一个 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 的项目都被视为较低。有没有解决的办法?

4

2 回答 2

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
于 2012-10-06T04:39:25.207 回答
1

由于 $item_rank 数组具有字符串值,因此 rsort 将按字母顺序对其进行排序。在字母顺序反向排序中,“2”将出现在“10”之前,即使 10 > 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
)
于 2012-10-06T04:50:08.187 回答