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 的 __FILE__ 常量
Jan 15 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
php单文件版在线代码编辑器
Mar 12 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 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
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
js给页面加style无效果的解决方法
2014/01/20 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
vue中轮训器的使用
2019/01/27 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
python+opencv实现阈值分割
2018/12/26 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
岗位职责的定义
2013/11/10 职场文书
自我评价中英文语句
2013/11/30 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
优秀语文教师事迹
2014/05/18 职场文书
新课培训心得体会
2014/09/03 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python
redis数据一致性的实现示例
2022/03/18 Redis