PHP多维数组排序array详解


Posted in PHP onNovember 21, 2017

PHP数组Array按字段排序

/**
   * Sort array by filed and type, common utility method.
   * @param array $data
   * @param string $sort_filed
   * @param string $sort_type SORT_ASC or SORT_DESC
   */
  public function sortByOneField($data, $filed, $type)
  {
    if (count($data) <= 0) {
      return $data;
    }
    foreach ($data as $key => $value) {
      $temp[$key] = $value[$filed];
    }
    array_multisort($temp, $type, $data);
    return $data;
  }

PHP数组Array按二维排序,先按第一个字段排序,再按第二个字段排序

/**
   * Sort array by filed and type, common utility method.
   * @param array $array
   * @param string $filed1
   * @param string $type1 SORT_ASC or SORT_DESC
   * @param string $filed2
   * @param string $type2 SORT_ASC or SORT_DESC
   */
  public function sortByTwoFiled($data, $filed1, $type1, $filed2, $type2)
  {
    if (count($data) <= 0) {
      return $data;
    }
    foreach ($data as $key => $value) {
      $temp_array1[$key] = $value[$filed1];
      $temp_array2[$key] = $value[$filed2];
    }
    array_multisort($temp_array1, $type1, $temp_array2, $type2, $data);
    return $users;
  }

sortMultiArray()最多支持3维数组排序,当然可以扩充的,自定义方法重载实现对多维数字的排序,这里的多维是说数据的多个字段。

使用方法:

1. sortMultiArray($data, [‘score' => SORT_DESC])

2. sortMultiArray($data, [‘score' => SORT_DESC, ‘count' => SORT_ASC])

3. sortMultiArray($data, [‘score' => SORT_DESC, ‘count' => SORT_ASC, ‘name' => SORT_ASC])

/**
   * Sort multi array by filed and type.
   * @param data $array
   * @param condition $array
   */
  public function sortMultiArray(&$data, $condition)
  {
    if (count($data) <= 0 || empty($condition)) {
      return $data;
    }
    $dimension = count($condition);
    $fileds = array_keys($condition);
    $types = array_values($condition);
    switch ($dimension) {
      case 1:
        $data = $this->sort1Dimension($data, $fileds[0], $types[0]);
        break;
      case 2:
        $data = $this->sort2Dimension($data, $fileds[0], $types[0], $fileds[1], $types[1]);
        break;
      default:
        $data = $this->sort3Dimension($data, $fileds[0], $types[0], $fileds[1], $types[1], $fileds[2], $types[2]);
        break;
    }
    return $data;
  }

  public function sort1Dimension(&$data, $filed, $type)
  {
    if (count($data) <= 0) {
      return $data;
    }
    foreach ($data as $key => $value) {
      $temp[$key] = $value[$filed];
    }
    array_multisort($temp, $type, $data);
    return $data;
  }

  public function sort2Dimension(&$data, $filed1, $type1, $filed2, $type2)
  {
    if (count($data) <= 0) {
      return $data;
    }
    foreach ($data as $key => $value) {
      $sort_filed1[$key] = $value[$filed1];
      $sort_filed2[$key] = $value[$filed2];
    }
    array_multisort($sort_filed1, $type1, $sort_filed2, $type2, $data);
    return $data;
  }

  public function sort3Dimension(&$data, $filed1, $type1, $filed2, $type2, $filed3, $type3)
  {
    if (count($data) <= 0) {
      return $data;
    }
    foreach ($data as $key => $value) {
      $sort_filed1[$key] = $value[$filed1];
      $sort_filed2[$key] = $value[$filed2];
      $sort_filed3[$key] = $value[$filed3];
    }
    array_multisort($sort_filed1, $type1, $sort_filed2, $type2, $sort_filed3, $type3, $data);
    return $data;
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
Laravel多域名下字段验证的方法
Apr 04 PHP
php array_chunk()函数用法与注意事项
Jul 12 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 #PHP
ecshop添加菜单及权限分配问题
Nov 21 #PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 #PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 #PHP
详解php语言最牛掰的Laravel框架
Nov 20 #PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 #PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 #PHP
You might like
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Python的collections模块真的很好用
2021/03/01 Python
荷兰本土平价百货:HEMA
2017/10/23 全球购物
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
初中家长寄语
2014/04/02 职场文书
个人校本研修方案
2014/05/26 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL