众所周知,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
}]