php动态交叉表,PHP Array交叉表实现代码
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交叉表实现代码相关推荐
- 乘法口诀表python_学习python之编写简单乘法口诀表实现代码
学习python之编写简单乘法口诀表实现代码 更新时间:2016年02月27日 22:23:30 投稿:mdxy-dxy 这篇文章主要介绍了学习python之编写简单乘法口诀表实现代码,需要的朋友可以 ...
- 97.分组交叉表、复杂交叉表
案例1-分组交叉表: 案例3:CREATE proc p_qry @JFKMBID varchar(20), @JFKMBSYSID varchar(1000), @date1 datetime, @ ...
- 顺序表讲解和顺序表实现增删查改
前言 顺序表是一种参见的数据结构 特点:类似数组的储存,需要预先开辟空间已备数据插入.(1)同时顺序表也因此会存在和数组同样的问题(例如:越界)(2)同时因为其类似与数组的结构给二分查找这种算法提供了 ...
- 单链表的代码python_python版本单链表实现代码
今天看了一下数据结构的书,发现其实数据结构没有几种,线性表,数组,字符串,队列和栈,等等,其实是一回事,然后就是树结构,图结构.数据结构的理论并不难,主要是要自己写一下这些数据结构以及对应的基本的操作 ...
- 在MySQL中实现交叉表查询2(动态交叉表)
在MySQL中实现交叉表查询2(动态交叉表) 交叉表分为静态交叉表和动态交叉表.其中静态交叉表中的列是固定的,因此相对容易实现:而动态交叉表中的列需要动态生成. 一.静态交叉表的实现 参见上一篇文章: ...
- 数据分析处理——透析表和交叉表
1透视表 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等.所进行的计算与数据跟数据透视表中的排列有关. 之所以称为数据透视表,是因为可以动态地改变它们的版面布置 ...
- 交叉表的简单实现2:使用前端程序实现
上篇介绍了 交叉表的简单实现1:使用存储过程,这里采取在前端程序实现. 实现要点: 1.读取所有目标成绩(flatScroreTable) 2.从目标成绩中提取考试时间(不重复),作为交叉表的列表头 ...
- crosstab交叉表_数据透视之交叉表 crosstab()
共1866字,阅读时间4分钟 点击上方蓝色字体关注公众号 1 回顾 昨天总结了Python的69个内置函数,回看: Python 69个内置函数分类总结 这些内置函数无论何时,我们都可以任意调用 ...
- 在MySQL中实现交叉表查询1(静态交叉表)
在MySQL中实现交叉表查询1(静态交叉表) 一.什么是交叉表 交叉表查询是将来源于某个表中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值. ...
最新文章
- 自动色阶、对比度、直方图均衡等算法的一些小改进
- python模拟ATM + 购物商城
- Java功底之Reference
- centos7.3安装nodejs
- Vue中实现页面上点击按钮下载文件(exe)
- JavaScript实现表单的分向提交
- HYSBZ - 3676 回文串(回文自动机)
- 如何不运用第三方变量实现两个数的交换
- 代码整洁之道——9、格式化
- IDEA中如何使用debug调试项目 一步一步详细教程
- 第一次部署海康威视DEMO的一些坑,最终运行成功
- 关于layui分页组件layPage如何动态调整页数的使用
- vscode远程连接提示过程试图写入的管道不存在
- CSS实现文字凹凸效果
- 什么是责任心?如何提高责任心?HR人才测评
- 推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大!
- 如何画 1PX 的线
- linux音频文件格式转换,在Ubuntu @ Linux 中音频和音乐文件的格式转换
- 找不到ftd2xx.dll和pycharm无法导入ftd2xx模块
- 电解电容、钽电容、普通电容
热门文章
- 更新cocoapods相关问题
- 关于集合中元素的有序无序的易混淆点
- JavaScript学习篇(4)
- SpringBoot中注册Servlet三大组件
- AnnotationTransactionAttributeSource is only available on Java 1.5 and higher
- python通过内置模块监控磁盘、内存、CPU、负载
- js的简单介绍及基本用法
- @property括号内属性讲解
- 2063:【例1.4】牛吃牧草【入门题】
- abaqus python 建立节点集合_Abaqus中Python通过findAt方法建立region区域