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
}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值