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 验证图片生成函数
May 21 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
php短址转换实现方法
Feb 25 PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
分享一个漂亮的php验证码类
Sep 29 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 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+DBM的同学录程序(4)
2006/10/09 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
prototype class详解
2006/09/07 Javascript
js跳转页面方法总结
2014/01/29 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
Django中template for如何使用方法
2021/01/31 Python
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
技校个人求职信范文
2014/01/25 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
辞职信范文大全
2015/03/02 职场文书
餐馆开业致辞
2015/08/01 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
Python利用FlashText算法实现替换字符串
2022/03/31 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python