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安装全攻略:APACHE
Oct 09 PHP
pw的一个放后门的方法分析
Oct 08 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
php+mysql查询优化简单实例
Jan 13 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
php中请求url的五种方法总结
Jul 13 PHP
PHP7新功能总结
Apr 14 PHP
php生成微信红包数组的方法
Sep 05 PHP
php在linux环境中如何使用redis详解
Dec 15 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/04/09 魔兽争霸
一个用php3编写的简单计数器
2006/10/09 PHP
php导出CSV抽象类实例
2014/09/24 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实现大文件排序的方法
2015/07/10 Python
Python实现简易Web爬虫详解
2018/01/03 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
实习教师自我鉴定
2013/12/09 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
旷课检讨书500字
2014/10/14 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
SQL Server中锁的用法
2022/05/20 SQL Server