2018年04月6日网站服务器迁移完成……

php 多维数组根据指定顺序排序 方法示例

php 苏 demo 75℃

写在前面:

开发过程中,对于数组排序经常使用,有时候冒泡、有时候选择、有时候根据指定key….

在日常面试过程中,也会经常有人问到关于数组的排序算法(过来人一般都懂的)

尤其是对于一些做平台、做应用服务的互联网公司,良好的逻辑处理算法,是招人过程中比较注重的一面。

最近在面试求职者,问了一个将二维数组按照指定规则排序的问题? 结果竟然有多位程序员答不上来。。

这里做一分享吧。

方法一:php函数usort

php的usort函数就是用来处理自定义排序的,闭包函数需要两个参数,这两个参数是传入的数组的相邻元素,从数组第0位开始。

代码示例:

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

});

用法示例:

//需要排序的数组
$arr = [
   '0' => [
       '_id' => 8,
       '_name'=> '绮梦之旅',
    ],
   '1' => [
      '_id' => 2,
      '_name'=> '缥缈峰',
    ],
   '2' => [
       '_id' => 3,
       '_name'=> '燃豆萁',
    ],
   '3' => [
       '_id' => 4,
       '_name'=> '天书',
    ],
];
$rule = [3,4,2,8];//指定排序规则数组
usort($arr, function ($a, $b) use ($rule) {
   return (array_search($a['_id'], $rule) < array_search($b['_id'], $rule)) ? -1 : 1;
   //将排序规则用use传入闭包函数,如果元素$a在$rule中的位置小于$b在$rule中的位置,则返回-1,反之返回1,
   //usort函数会根据闭包函数的返回值将$a和$b的位置进行调整
});

这里_id 是作为 关联rules 里的ID 。将$arr 按照子项ID 遵循rule规则列表进行排序。

方法二:

比较笨的方法了,两个数组交叉循环遍历一下 ,不推荐。

/**
 * 调整数组根据指定字段指定规则进行排序
 * @param $arr
 * @param $field
 * @param $sort_fields
 * @return array
 */
public static function customer_arr_sort($arr,$field,$sort_fields){
   $res = [];
   foreach($sort_fields as $key => &$val){
      foreach($arr as $k => &$v){
         if($v[$field] == $val){
            array_push($res,$v);
            unset($arr[$k]);
            break;
         }
      }
   }
   return $res;
}

欢迎网友们,如果有更好的办法 可以给博主留言哦!

ps:

很多人不知道数据库中怎么实现,其实mysql里相对简单,使用order by field 或者 find_in_set即可哦。

 

 

打赏

转载请注明:苏demo的博客 » php 多维数组根据指定顺序排序 方法示例

   如果本篇文章对您有帮助,欢迎向博主进行赞助,赞助时请写上您的用户名。
支付宝直接捐助帐号oracle_lee@qq.com 感谢支持!
喜欢 (0)or分享 (0)