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的位置进行调整 });

 

posted @ 2018-04-04 16:42  姗姗醉了  阅读(1464)  评论(0编辑  收藏  举报