博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 多维数据根据某个或多个字段排序
阅读量:6083 次
发布时间:2019-06-20

本文共 1550 字,大约阅读时间需要 5 分钟。

实现多维数组的指定多个字段排序

上面的实例讲解了如何实现多维数组指定一个字段排序,但如果要实现指定多个字段来对数组进行排序该如何思考? 

多个字段是几个?2个,3个或更多,所以这个不确定的因素需要排除。 

我们先来看2指定2个字段进行排序的方案:

$arr = array(  '0' => array(    'id' => 3,    'age' => 27  ),  '1' => array(    'id' => 5,    'age' => 50  ),  '2' => array(    'id' => 4,    'age' => 44  ),  '3' => array(    'id' => 3,    'age' => 78  ) );foreach ( $arr as $key => $row ){  $id[$key] = $row ['id'];  $age[$key] = $row ['age'];}array_multisort($id, SORT_ASC, $age, SORT_DESC, $arr);print_r($arr);//result:Array([0]=>Array(['id']=>3 ['age']=>78) [1]=>Array(['id']=>3 ['age']=>27) [2]=>Array(['id']=>4 ['age']=>44) [3]=>Array(['id']=>5 ['age']=>50))

  

重构上述代码,只要采用php中的func_get_args函数,来动态获取传入的值,既可以解决多字段个数不确定的问题。实现如下: $array1 = array(      0=>array('id'=>8,'name'=>'Apple','age'=> 18),      1=>array('id'=>8,'name'=>'Bed','age'=>17),      2=>array('id'=>5,'name'=>'Cos','age'=>16),      3=>array('id'=>5,'name'=>'Cos','age'=>14));function sortArrByManyField(){  $args = func_get_args();  if(empty($args)){    return null;  }  $arr = array_shift($args);  if(!is_array($arr)){    throw new Exception("第一个参数不为数组");  }  foreach($args as $key => $field){    if(is_string($field)){      $temp = array();      foreach($arr as $index=> $val){        $temp[$index] = $val[$field];      }      $args[$key] = $temp;    }  }  $args[] = &$arr;//引用值  call_user_func_array('array_multisort',$args);  return array_pop($args);}$arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC);print_r($arr);

  

转载于:https://www.cnblogs.com/sz-xioabai/p/10797726.html

你可能感兴趣的文章
按键精灵
查看>>
解释型语言与编译型语言的区别【转】
查看>>
gdb调试python
查看>>
Ubuntu Server如何配置SFTP
查看>>
spring与spring-data-redis整合redis
查看>>
Android 控件EditText的setOnEditorActionListener方法的理解
查看>>
Angular企业级开发(4)-ngResource和REST介绍
查看>>
记首次长途开车回家,本次经历有疏忽也有不顺,但从中学到很多经验
查看>>
rsync无密码实时增量同步
查看>>
#你好Unity3D#Hierarchy视图监听gameObject点击事件
查看>>
stl map中的lower_bound和 upper_bound
查看>>
Django中的QuerySet查询优化之prefetch_related
查看>>
ORA-00600 3020 ORA-10567案例
查看>>
Atitit 发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化
查看>>
SVN版本管理trunk及branch相关merge操作
查看>>
nginx自动检测后台服务器健康状态
查看>>
<context-param>与<init-param>
查看>>
Hive Streaming 追加 ORC 文件
查看>>
禁用触摸点击事件
查看>>
spring data jpa 创建方法名进行简单查询
查看>>