***PHP 數組排序 +php二維數組排序方法(PHP比較器)

 

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值,並計算長度,然後比較長度就能夠了。
 
筆者更喜歡第二種方法,由於少了提取排序內容到一維數組的步驟,並且排序方法更爲靈活。
相關文章
相關標籤/搜索