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 相关文章推荐
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
php自定义session示例分享
Apr 22 PHP
PHP 导出Excel示例分享
Aug 18 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 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 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
python基础教程之常用运算符
2014/08/29 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
Python中的With语句的使用及原理
2020/07/29 Python
python属于哪种语言
2020/08/16 Python
Python 必须了解的5种高级特征
2020/09/10 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
大学军训感言1000字
2014/02/25 职场文书
护士节策划方案
2014/05/19 职场文书
数学教育专业求职信
2014/07/22 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
平遥古城导游词
2015/02/03 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书