常發生的情況是在檔案名稱以數字來命名時,例如"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);
全站熱搜
留言列表