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 はそれをアルファベット順に並べ替えます。アルファベット順の逆ソートでは、10 > 2 であっても、「2」が「10」より前になります。

このタイプのソートには 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 に答える