美文网首页PHP经验分享程序员
PHP 数组对象、数组自定义排序

PHP 数组对象、数组自定义排序

作者: 萌二宝 | 来源:发表于2017-07-26 16:09 被阅读208次

之前遇到 iOS 项目时, 只要是排序类问题, 就来个冒泡排序, 再复杂一点的就来个递归。提高性能的话就来个 flag 或者 temp, 虽然是提高了性能, 内心总有一种耍小聪明的感觉, 因为我就是一个感性的 coder, 对待代码总是优雅的。

言归正传, php 在对待数组排序上,很优雅, 有很多函数, 可以参考php数组排序, 最近比较勤劳, 用了一下 usort 自定义排序。

使用情景

想像一下, 你有一个数组需要处理, 数组里的元素依旧是一个数组, 或者是一个对象, 而你要排序的是这个数组或者是这个对象里面的某个 value 。

情景 : 有一个班级, 需要对学生成绩进行由高到低展示。

school report.png

老师为这个班得操碎了心啊...

需要处理的数据形态

我们定义为 $groupInfo

[
{"user_id":77,
"user_name":"LQ",
"grade":90,
"joined_at":"2017-07-21 14:33",
"resulted_at":"2017-07-21 14:36",
"during":"00:02:25"},
{"user_id":78,
"user_name":"stu1",
"grade":10,
"joined_at":"2017-07-25 18:19",
"resulted_at":"2017-07-25 18:20",
"during":"00:00:24"},
{"user_id":79,
"user_name":"stu2",
"grade":40,
"joined_at":"2017-07-26 10:28",
"resulted_at":"2017-07-26 10:28",
"during":"00:00:13"
},
{"user_id":80,
"user_name":"stu3",
"grade":70,
"joined_at":"2017-07-26 10:29",
"resulted_at":"2017-07-26 10:29",
"during":"00:00:22"
}
]

就是这样一个数组, 里面是对象类型, 要对 grade 字段进行排序, 如何处理呢

解决办法

用 usort, 还有好多可以用, 而且 还有什么 callback 回调, 请再互相探讨,直接想到的就是这个usort(待排序数组,’自定义排序函数名’);

    1. 写一个比较方法

    分数降序排序, 若分数相等, 则按照用时较短的优先


 /*分数降序排序, 若分数相等, 则按照用时较短的优先*/

    function sortByScore($oba, $obb){

        if($oba->grade < $obb->grade){
            return 1;
        }elseif ($oba->grade == $obb->grade){
            return ($oba->during <= $obb->during) ? 1 : -1;
        }

//      //  if($oba['grade'] < $obb['grade']){
//      //    return 1;
//      //  }elseif ($oba['grade'] == $obb['grade']){
//      //    return ($oba['during'] <= $obb['during']) ? 1 : -1;
//      // }
    }

说的麻婆一些, 如果你是处理数组里面的数组, 就不要用 -> 方式来访问, 数组该怎么访问就怎么访问, 就是被注掉的那种咯

  • 2.调用该方法
 usort($groupInfo,  'sortByScore');

如果我们在框架中使用 usort 函数, 我们应该用以下这种方式调用, 当然还有好多其他方式...不多赘述

 usort($groupInfo, [$this, 'sortByScore']);

成功排序后


[
{"user_id":77,
"user_name":"LQ",
"grade":90,
"during":"00:02:25"},
{"user_id":80,
"user_name":"stu3",
"grade":70,
"during":"00:00:22"},
{"user_id":79,
"user_name":"stu2",
"grade":40,
"during":"00:00:13"},
{"user_id":78,
"user_name":"stu1",
"grade":10,
"during":"00:00:24"}]

以上!

广泛交流, 多多指教!

相关文章

  • PHP 数组对象、数组自定义排序

    之前遇到 iOS 项目时, 只要是排序类问题, 就来个冒泡排序, 再复杂一点的就来个递归。提高性能的话就来个 fl...

  • 算法总结

    1.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 //冒泡排序(数组排序) function bubb...

  • 2018-01-14

    php数组排序 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据...

  • PHP常用数组排序算法

    title: PHP常用数组排序算法tags: [PHP,数组,排序,算法] 这几天写到的代码中,用到了许多对数组...

  • java 数组和list排序

    数组排序 其中有数组排序和数组对象排序 数组一些数字排序则直接用Arrays.sort()加数组就可以。数组对象则...

  • 浅析三种排序和我写的一种排序

    要说起对数组进行排序,php很擅长,php有非常多的数组函数,其中就包括了排序。冒泡排序,选择排序,插入排序,今天...

  • 从小到大,从大到小,PHP 数组排序

    数组排序:数组中的元素能够以字母或数字顺序进行升序或降序排序。 PHP - 数组的排序函数 sort() - 以升...

  • JS数组操作

    对象数组排序 标签(空格分隔): JS 一个对象数组 根据id进行正序排序 数组分割

  • js中对象数组按对象属性排序

    数组对象要按属性大小排序怎么办? 数组对象属性排序 我们要如何实现数组中的对象按data大小排序? sort方法 ...

  • go数组对象排序

    go数组对象排序 对象数组排序 service 排序前:[{Name:xj16 Sex:男16 Age:16} {...

网友评论

    本文标题:PHP 数组对象、数组自定义排序

    本文链接:https://www.haomeiwen.com/subject/mnqokxtx.html