***PHP陣列排序+php二維陣列排序方法(PHP比較器)

suboysugar發表於2016-06-05

 

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從小到大進行排序。筆者整理了兩個方法出來,分享給大家。
 
1、使用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);
 
 
2、使用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值,並計算長度,而後比較長度就可以了。
 
筆者更喜歡第二種方法,因為少了提取排序內容到一維陣列的步驟,而且排序方法更為靈活。

如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/


相關文章