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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
PHP导入导出Excel代码
Jul 07 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
Docker搭建自己的PHP开发环境
Feb 24 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 采集心得技巧
2009/05/15 PHP
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
JS Timing
2007/04/21 Javascript
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
解析vue中的$mount
2017/12/21 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
值得收藏的10道python 面试题
2019/04/15 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
Python @property装饰器原理解析
2020/01/22 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
史上最牛辞职信
2015/05/13 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL