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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
一个很不错的PHP翻页类
Jun 01 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 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 极验验证码实例讲解
2016/09/29 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
js tab效果的实现代码
2009/12/26 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
python创建关联数组(字典)的方法
2015/05/04 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
python selenium操作cookie的实现
2020/03/18 Python
python 实现的车牌识别项目
2021/01/25 Python
python反扒机制的5种解决方法
2021/02/06 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
机关门卫制度
2014/02/01 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
酒鬼酒广告词
2014/03/21 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
小学毕业演讲稿
2014/04/25 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python