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实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
php select,radio和checkbox默认选择的实现方法
May 15 PHP
php下尝试使用GraphicsMagick的缩略图功能
Jan 01 PHP
php实现的SESSION类
Dec 02 PHP
php二维数组合并及去重复的方法
Mar 04 PHP
ajax+php控制所有后台函数调用
Jul 15 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
php两点地理坐标距离的计算方法
Dec 29 PHP
PHP-FPM 的管理和配置详解
Feb 17 PHP
解决laravel session失效的问题
Oct 14 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/10/09 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
webpack4简单入门实例
2018/09/06 Javascript
Seajs源码详解分析
2019/04/02 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
Python函数式编程指南(二):从函数开始
2015/06/24 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
python绘制高斯曲线
2021/02/19 Python
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
什么是Smart Navigation?
2016/07/03 面试题
简历里的自我评价
2014/01/31 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
Python图像处理之图像拼接
2021/04/28 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android