1. 程式人生 > >php usort 自定義排序

php usort 自定義排序

眾所周知,php除了sort,rsort,asort,arsort,ksort,krsort這6種排序方法,還提供了一種自定義陣列排序usort。
usort方法一共2個引數,
第一個引數是你要排序的陣列,
第二個引數是你自定義的排序方法,此方法必須返回0或者1或者-1
自定義的排序方法有2個引數
$a,$b
如果 a = b, 返回 0
如果 a > b, 返回 1
如果 a < b, 返回 -1

目前有一個物件集,資料結構如下

$ops=[{
    "operator_id": 1,
    "operator_name": "test1",
    "orgnization_id"
: 9 }, { "operator_id": 2, "operator_name": "\u7cfb\u7edf\u4fdd\u7559\u7528\u6237", "orgnization_id": 0 }, { "operator_id": 4, "operator_name": "\u5f90\u5174\u9f99", "orgnization_id": 36 }, { "operator_id": 6, "operator_name": "\u9a6c\u5cf0", "orgnization_id": 36
}]

因為這是一個collection型別的結果集,所以要將至轉換成物件陣列型別

$ar = json_decode(json_encode($ops),true);

以下是詳細方法

    public function sortOp(){
        //laravel框架Model查詢方法,結果就是上文的結果集
        $ops = \Operator\Operator::where('operator_id','<',7)->get();
        //轉化為陣列
        $ar = json_decode(json_encode($ops),true
); //開始排序 usort($ar,array($this,'compare')); return $ar; } //自定義排序函式 根據operator_name排序 public function compare($a,$b){ return strcmp($a['operator_name'],$b['operator_name']); }

返回的結果為

[{
    "operator_id": 1,
    "operator_name": "test1",
    "orgnization_id": 9
}, {
    "operator_id": 4,
    "operator_name": "\u5f90\u5174\u9f99",
    "orgnization_id": 36
}, {
    "operator_id": 2,
    "operator_name": "\u7cfb\u7edf\u4fdd\u7559\u7528\u6237",
    "orgnization_id": 0
}, {
    "operator_id": 6,
    "operator_name": "\u9a6c\u5cf0",
    "orgnization_id": 36
}]