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
什么是MVC,好东西啊
May 03 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
php strftime函数获取日期时间(switch用法)
May 16 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使用百度天气接口示例
2014/04/22 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
jquery UI 1.72 之datepicker
2009/12/29 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
浅谈Python中的bs4基础
2018/10/21 Python
python类的实例化问题解决
2019/08/31 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
大学新生欢迎词
2014/01/10 职场文书
银行学习十八大感想
2014/01/11 职场文书
咖啡书吧创业计划书
2014/01/13 职场文书
将相和教学反思
2014/02/04 职场文书
七匹狼男装广告词
2014/03/21 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
政府信息公开实施方案
2014/05/09 职场文书
九九重阳节标语
2014/10/07 职场文书
活动简报范文
2015/07/22 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
React更新渲染原理深入分析
2022/12/24 Javascript