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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
Email+URL的判断和自动转换函数
Oct 09 PHP
php不用正则采集速度探究总结
Mar 24 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
PHP检测用户语言的方法
Jun 15 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP 开源框架22个简单简介
2009/08/24 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
js循环改变div颜色具体方法
2013/06/25 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
wxPython实现带颜色的进度条
2019/11/19 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
公司请假条范文
2014/04/11 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
灵山大佛导游词
2015/02/04 职场文书
特岗教师个人总结
2015/02/10 职场文书