常發生的情況是在檔案名稱以數字來命名時,例如"img12.png", "img10.png", "img2.png", "img1.png",通常預期排序後的結果應該img1.png、img2.png、img10.png、img12.png,但是結果卻是img1.png、img10、img12、img2,這時候你就可以使用陣列函式中的特殊排序natsort(),以下我就直接摘錄官方的程式碼為範例:

//建立測試陣列
$array1 = $array2 = array(
     "img12.png",
     "img10.png",
     "img2.png",
     "img1.png"
);
//採用一般排序
sort($array1);
print_r($array1);
//採用自然排序
natsort($array2);
print_r($array2);
/*
一般排序法
Array
(
    [0] => img1.png
    [1] => img10.png
    [2] => img12.png
    [3] => img2.png
)

自然排序法
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)
*/

不過要注意的是natsort()會將陣列的索引打亂掉,若要保持索引和值的關係(key => value),那麼改用natcasesort()吧,另外,如果資料是從資料庫讀取的話,也可以用CAST 把字串轉為數字再排序,一樣有這樣效果唷!

-- 直接使用SQL語法 --
SELECT * FROM  table_name ORDER BY CAST(file_name AS UNSIGNED);

低溫烘培 發表在 痞客邦 PIXNET 留言(0) 人氣()