PHP - 一維數組的排序函數
在本節中,咱們將學習以下 PHP 數組排序函數:數組
- sort() - 以升序對數組排序
- rsort() - 以降序對數組排序
- asort() - 根據值,以升序對關聯數組進行排序
- ksort() - 根據鍵,以升序對關聯數組進行排序
- arsort() - 根據值,以降序對關聯數組進行排序
- krsort() - 根據鍵,以降序對關聯數組進行排序
一維數組排序能夠使用asort、ksort等一些方法進程排序,相對來講比較簡單。二維數組的排序怎麼實現呢?使用array_multisort和usort能夠實現函數
例如像下面的數組:
代碼以下:
$users = array(
array('name' => 'tom', 'age' => 20)
, array('name' => 'anny', 'age' => 18)
, array('name' => 'jack', 'age' => 22)
);
但願能按照age從小到大進行排序。筆者整理了兩個方法出來,分享給你們。
一、使用array_multisort
使用這個方法,會比較麻煩些,要將age提取出來存儲到一維數組裏,而後按照age升序排列。具體代碼以下:
代碼以下:
$ages = array();
foreach ($users as $user) {
$ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);
執行後,$users就是排序好的數組了,能夠打印出來看看。若是須要先按年齡升序排列,再按照名稱升序排列,方法同上,就是多提取一個名稱數組出來,最後的排序方法這樣調用:
代碼以下:
array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);
二、使用usort
使用這個方法最大的好處就是能夠自定義一些比較複雜的排序方法。例如按照名稱的長度降序排列:
代碼以下:
usort($users, function($a, $b) {
$al = strlen($a['name']);
$bl = strlen($b['name']);
if ($al == $bl)
return 0;
return ($al > $bl) ? -1 : 1;
});
這裏使用了匿名函數,若是有須要也能夠單獨提取出來。其中$a, $b能夠理解爲$users數組下的元素,能夠直接索引name值,並計算長度,然後比較長度就能夠了。
筆者更喜歡第二種方法,由於少了提取排序內容到一維數組的步驟,並且排序方法更爲靈活。