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 include的妙用,实现路径加密
Jul 29 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
php后门URL的防范
Nov 12 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
php mysql数据库操作类(实例讲解)
Aug 06 PHP
php微信开发之音乐回复功能
Jun 14 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
Jun 12 PHP
php实现的生成排列算法示例
Jul 25 PHP
php中对象引用和复制实例分析
Aug 14 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 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
星际玩家的三大定律
2020/03/04 星际争霸
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
PHP教程 预定义变量
2009/10/23 PHP
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
Python之PyUnit单元测试实例
2014/10/11 Python
Python and、or以及and-or语法总结
2015/04/14 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Python while true实现爬虫定时任务
2020/06/08 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
电脑教师的自我评价
2013/12/18 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
故意杀人案辩护词
2015/05/21 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
VUE递归树形实现多级列表
2022/07/15 Vue.js
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技