PHP数组对象自定义排序
程序员文章站
2022-06-01 21:20:34
...
最近工作中遇到一个问题:
有以下一个数组对象(即数组的元素是一个个包含多个字段的对象)进行多字段排序,该数组对象原始数据如下:
排序规则如下:
1 默认按照对象的createtime字段升序排列。
2 创建时间相等的情况下,按照value字段升序排列。
按照以上排序规则,最终显示结果应该为:
Data[2]-> Data[3]-> Data[0]-> Data[1]
现在去查询PHP自带排序方法,简单排序(sort)只能满足按照某一个字段的键值或字母序顺序排列,例如对上述数组对象data进行sort排序后的显示结果分别为:
sort($data);
此处可以看到sort简单排序默认按照data数组的第一个字段paracode的键值进行升序排列,这不是我所想要的。
至此,由于本人需求的排序有比较复杂的逻辑,只能考虑自定义排序了。
PHP允许定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数来创建自定义排序。对于自定义比较函数,如果第一个参数比第二个参数小,则比较函数必须返回一个比0小的数,反之则必须返回一个比0大的数,两个参数相等则返回0。 自定义排序格式如下:
usort(待排序数组,’自定义排序函数名’);
例如对数组data中元素的长度进行排序,执行PHP程序如下:
现在回到原问题,根据我的需求,自定义PHP排序函数如下:
排序后结果如下:
上图可见在createtime相等的情况下,paracode按照升序排列,正是我需要的结果,搞定。