php usort 自定義排序
阿新 • • 發佈:2019-02-04
眾所周知,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
}]