PHP Array交叉表实现代码

2019-04-09 16:40:24来源:易采站长站作者:王旭

如果使用sql语句做的话 工作量太大了,于是尝试自己写一个交叉表的类,好二话不说,我们看看代码

代码如下:

/**

* 基本交叉表

* @author hugh

*

*/

class Pivot

{

private $HORIZONTAL_TOTAL_FIELD = 'total';

private $VERTICAL_TOTAL_FIELD = 'total';

private $data;

private $topPivot;

private $leftPivot;

private $measure;

private $horizontalColumn = array ();

private $verticalColumn = array ();

private $pivotValue = array ();

private $isHorizontalTotal = true;

private $isVerticalTotal = true;

private $horizontalTotal = null;

private $verticalTotal = null;

private $title = 'PivotTab';

/**

* 初始化交叉表

*/

private function InitPivot()

{

$this->topPivot;

foreach ( $this->data as $d )

{

$this->horizontalColumn [] = $d [$this->leftPivot];

$this->verticalColumn [] = $d [$this->topPivot];

}

$this->horizontalColumn = array_unique ( $this->horizontalColumn );

$this->verticalColumn = array_unique ( $this->verticalColumn );

$reasult = array ();

foreach ( $this->horizontalColumn as $h )

{

foreach ( $this->verticalColumn as $v )

{

$this->pivotValue [$h] [$v] = 0;

}

}

}

/**

* 填充数据

*/

private function fillData()

{

foreach ( $this->data as $row )

{

$this->pivotValue [$row [$this->leftPivot]] [$row [$this->topPivot]] += $row [$this->measure];

}

if ($this->isHorizontalTotal)

{

$this->setHorizontalTotal ();

}

if ($this->isVerticalTotal)

{

$this->setVerticalTotal ();

}

}

/**

* 设置纵向合计

*/

private function setVerticalTotal()

{

$this->verticalColumn [] = $this->VERTICAL_TOTAL_FIELD;

foreach ( $this->horizontalColumn as $i )

{

$rowsum = 0;

foreach ( $this->verticalColumn as $j )

{

$rowsum += $this->pivotValue [$i] [$j];

}

$this->pivotValue [$i] [$this->TOTAL_FIELD] = $rowsum;

}

}

/**

* 设置横向合计

*/

private function setHorizontalTotal()

{

$this->horizontalColumn [] = $this->HORIZONTAL_TOTAL_FIELD;

foreach ( $this->verticalColumn as $i )

{

$rowsum = 0;

foreach ( $this->horizontalColumn as $j )

{

$rowsum += $this->pivotValue [$j] [$i];

}

$this->pivotValue [$this->HORIZONTAL_TOTAL_FIELD] [$i] = $rowsum;

}

}

/**

* 渲染

*/

function Render()

{

echo '

';

print_r ( $this->pivotValue );

}

/**

* 渲染为table

*/

function RenderToTable()

{

$resault = "

$resault .= "

$this->titlen";

foreach ( $this->verticalColumn as $value )

{

$resault .= "

$valuen";

}

$resault .= "

n";

foreach ( $this->horizontalColumn as $i )

热点聚合:

php动态交叉表,PHP Array交叉表实现代码相关推荐

  1. 乘法口诀表python_学习python之编写简单乘法口诀表实现代码

    学习python之编写简单乘法口诀表实现代码 更新时间:2016年02月27日 22:23:30 投稿:mdxy-dxy 这篇文章主要介绍了学习python之编写简单乘法口诀表实现代码,需要的朋友可以 ...

  2. 97.分组交叉表、复杂交叉表

    案例1-分组交叉表: 案例3:CREATE proc p_qry @JFKMBID varchar(20), @JFKMBSYSID varchar(1000), @date1 datetime, @ ...

  3. 顺序表讲解和顺序表实现增删查改

    前言 顺序表是一种参见的数据结构 特点:类似数组的储存,需要预先开辟空间已备数据插入.(1)同时顺序表也因此会存在和数组同样的问题(例如:越界)(2)同时因为其类似与数组的结构给二分查找这种算法提供了 ...

  4. 单链表的代码python_python版本单链表实现代码

    今天看了一下数据结构的书,发现其实数据结构没有几种,线性表,数组,字符串,队列和栈,等等,其实是一回事,然后就是树结构,图结构.数据结构的理论并不难,主要是要自己写一下这些数据结构以及对应的基本的操作 ...

  5. 在MySQL中实现交叉表查询2(动态交叉表)

    在MySQL中实现交叉表查询2(动态交叉表) 交叉表分为静态交叉表和动态交叉表.其中静态交叉表中的列是固定的,因此相对容易实现:而动态交叉表中的列需要动态生成. 一.静态交叉表的实现 参见上一篇文章: ...

  6. 数据分析处理——透析表和交叉表

    1透视表 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等.所进行的计算与数据跟数据透视表中的排列有关. 之所以称为数据透视表,是因为可以动态地改变它们的版面布置 ...

  7. 交叉表的简单实现2:使用前端程序实现

    上篇介绍了 交叉表的简单实现1:使用存储过程,这里采取在前端程序实现. 实现要点: 1.读取所有目标成绩(flatScroreTable) 2.从目标成绩中提取考试时间(不重复),作为交叉表的列表头 ...

  8. crosstab交叉表_数据透视之交叉表 crosstab()

    共1866字,阅读时间4分钟  点击上方蓝色字体关注公众号 1 回顾 昨天总结了Python的69个内置函数,回看:  Python 69个内置函数分类总结  这些内置函数无论何时,我们都可以任意调用 ...

  9. 在MySQL中实现交叉表查询1(静态交叉表)

    在MySQL中实现交叉表查询1(静态交叉表) 一.什么是交叉表 交叉表查询是将来源于某个表中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值. ...

最新文章

  1. 自动色阶、对比度、直方图均衡等算法的一些小改进
  2. python模拟ATM + 购物商城
  3. Java功底之Reference
  4. centos7.3安装nodejs
  5. Vue中实现页面上点击按钮下载文件(exe)
  6. JavaScript实现表单的分向提交
  7. HYSBZ - 3676 回文串(回文自动机)
  8. 如何不运用第三方变量实现两个数的交换
  9. 代码整洁之道——9、格式化
  10. IDEA中如何使用debug调试项目 一步一步详细教程
  11. 第一次部署海康威视DEMO的一些坑,最终运行成功
  12. 关于layui分页组件layPage如何动态调整页数的使用
  13. vscode远程连接提示过程试图写入的管道不存在
  14. CSS实现文字凹凸效果
  15. 什么是责任心?如何提高责任心?HR人才测评
  16. 推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大!
  17. 如何画 1PX 的线
  18. linux音频文件格式转换,在Ubuntu @ Linux 中音频和音乐文件的格式转换
  19. 找不到ftd2xx.dll和pycharm无法导入ftd2xx模块
  20. 电解电容、钽电容、普通电容

热门文章

  1. 更新cocoapods相关问题
  2. 关于集合中元素的有序无序的易混淆点
  3. JavaScript学习篇(4)
  4. SpringBoot中注册Servlet三大组件
  5. AnnotationTransactionAttributeSource is only available on Java 1.5 and higher
  6. python通过内置模块监控磁盘、内存、CPU、负载
  7. js的简单介绍及基本用法
  8. @property括号内属性讲解
  9. 2063:【例1.4】牛吃牧草【入门题】
  10. abaqus python 建立节点集合_Abaqus中Python通过findAt方法建立region区域