• php按照指定顺序的排序


       今天遇到一个需求,需要对一个数组按指定顺序进行排序,最终查到个解决办法:

        $sort_rule = [5,7,3,1,8,2];

         $arr = [1,2,3,5,7,8];  

    //需求,将数组$arr以$sort_rule指定的顺序进行排序

     解决方式1

       $a = array_intersect($sort_rule,$arr);

       $b = array_diff($arr,$sort_rule);

       $re = array_merge($a, $b);

     array_intersect函数的作用是基于第一个数组获取两个数组的交集,如上述例子

       array_intersect($sort_rule, $arr);

       先根据$sort_rule中的第一个元素从$arr中找相同的元素,如果有,则取出, 没有则找第二个元素,依次类推

       因此,最后获取的交集数组的顺序,和$sort_sule数组的顺序是一模一样的 也就实现了按sort_rule指定的顺序进行排序的要求

    解决方式2

    usort($arr, function ($a, $b) use ($rule) {

    return (array_search($a, $rule) < array_search($b, $rule)) ? -1 : 1;

    //将排序规则用use传入闭包函数,如果元素$a在$rule中的位置小于$b在$rule中的位置,则返回-1,反之返回1, //usort函数会根据闭包函数的返回值将$a和$b的位置进行调整 });

  • 相关阅读:
    触发器
    新登录用户的次日成功的留存率
    获取薪水第二多的
    找到薪水比经理高的员工
    成绩排名
    exists 和 in
    sum+case 计数
    前N个员工的salary累计和
    员工的薪水按照salary进行按照1N的排名,相同salary并列
    洛谷2678 跳石头
  • 原文地址:https://www.cnblogs.com/sjhsszl/p/8718099.html
Copyright © 2020-2023  润新知