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实现高效获取图片尺寸的方法
Dec 12 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
PHP排序算法类实例
Jun 17 PHP
PHP的Json中文处理解决方案
Sep 29 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
PHP抽象类与接口的区别详解
Mar 21 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
PHP实现页面静态化深入讲解
Mar 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
PHP语法速查表
2006/12/06 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
jquery each()源代码
2011/02/14 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
Django+zTree构建组织架构树的方法
2019/08/21 Python
Python笔记之代理模式
2019/11/20 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
运输服务质量承诺书
2014/03/27 职场文书
协议书怎么写
2014/04/21 职场文书
法院信息化建设方案
2014/05/21 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
空气的环保标语
2014/06/12 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
文体活动总结
2015/02/04 职场文书
论文答辩开场白大全
2015/05/27 职场文书
大学生读书笔记范文
2015/07/01 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers