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 相关文章推荐
PHP中的串行化变量和序列化对象
Sep 05 PHP
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 PHP
php统计数组元素个数的方法
Jul 02 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 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伪静态写法附代码
2008/06/20 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
python写xml文件的操作实例
2014/10/05 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
django 常用orm操作详解
2017/09/13 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
python中提高pip install速度
2020/02/14 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
python如何提升爬虫效率
2020/09/27 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
小学教师的自我评价范例
2013/10/31 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
2014高考励志标语
2014/06/05 职场文书
大学生工作自荐书
2014/06/16 职场文书
员工生日活动方案
2014/08/24 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
大学生入党自荐书
2015/03/05 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
人工作失职检讨书
2015/05/05 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书