如果使用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 '<pre>';
print_r ( $this->pivotValue );
}
/**
* 渲染为table
*/
function RenderToTable()
{
$resault = "<table border='1' width='250'>\n";
$resault .= "<tr><td>$this->title</td>\n";
foreach ( $this->verticalColumn as $value )
{
$resault .= "<td>$value</td>\n";
}
$resault .= "</tr>\n";
foreach ( $this->horizontalColumn as $i )
{
$resault .= "<tr><td>$i</td>\n";
foreach ( $this->pivotValue [$i] as $value )
{
$resault .= "<td>$value</td>\n";
}
$resault .= "</tr>\n";
}
$resault .= "</table>";
return $resault;
}
/**
* 构造交叉表
* @param $data 数据源
* @param $topPivot 头栏目字段
* @param $leftPivot 左栏目字段
* @param $measure 计算量
*/
function __construct(array $data, $topPivot, $leftPivot, $measure)
{
$this->data = $data;
$this->leftPivot = $leftPivot;
$this->topPivot = $topPivot;
$this->measure = $measure;
$this->horizontalColumn = array ();
$this->verticalColumn = array ();
$this->InitPivot ();
$this->fillData ();
}
}
重点在于InitPivot方法及fillData方法。
InitPivot里面保证了所有的item都会有值(默认为0)
fillData方法使用选择填充添加的方法,将数据填充入我们装数据的$pivotValue里面。
然后喜欢怎么输出都可以了
相关推荐:
SEO场景下的数字营销:如何通过精准优化提升网站流量,陕西融发建设集团网站
为什么行业都要做seo,为什么要做seo ,ai明信片
SEO占位:如何在竞争激烈的市场中占得先机?,梁平区省心全网营销推广
seo用什么论坛引流,seo引流方法 ,ai写作续写神器
京东业绩再创新高:未来电商巨头的成功之道,如何做seo优化留痕
《收录情况:数字时代的网络信息检索与价值体现》,山东全域营销推广软件客服电话
SEO引擎优化方法-让你的网站流量暴增的实战指南,ai智慧树
seo需要什么能力,seo需要哪些技术 ,ai长条弯曲
GPT哪个模型是最新的?AI语言生成的未来,ai回头
如何快速写出高质量的AI文章:从入门到精通
SEO这种营销方式,改变你网站流量的秘密武器,佛山网站设计建设
ChatGPT崩一次多久修复?揭秘背后的技术与保障,ai1818818
在线AI文章生成:内容创作新革命
SEM有哪几个平台?数字营销的多元选择,AI怎么取消移动间距
什么是seo推广找行者SEO,seo推广效果怎么样 ,西宁ai万词霸屏系统
seo逻辑是什么,seo思路 ,语音主播怎么ai写作业
如何下载免费AI软件,让你的工作和生活更智能
如何利用AI生成高质量文章,提升写作效率与创意?
为什么seo推广那么多,seo推广难吗 ,东莞ai听译平台
ChatGPT页面不自动显示最新消息:如何解决这一困扰,提升使用体验?,斑马ai幼儿百度云网盘
SEO是什么意思?揭秘SEO的真正含义与重要性,公司推广网站询问d火18星来
ChapGPT免费爬墙,轻松访问全球互联网资源!,蜜桃ai插画
怎样使用AI写文章:释放创作潜能,提升写作效率
“多网建站”助力企业跨越发展,开启全新数字化时代,海南网站优化电池
seo网赚什么意思,网站seo赚钱 ,ai打不开ai
为什么选择收录网站是企业在线营销的必备策略,全网营销与推广
AI生成网页模板,轻松打造专业网站,ai网格画法
AI助手Stut:智能时代的创新引擎,开启未来工作新篇章,ai对ai的格斗游戏
ChatGPT网页版内容显示不全的解决方案:如何轻松解决问题?,课件ai
为什么做seo矩阵项目,为什么做seo矩阵项目不能做 ,怎么用ai写作
seo适合什么职业,seo有前途么 ,ai小精灵
SEO查看-如何通过精确分析提升网站流量与排名,东丽网站建设价格
pbootcms前端翻译插件-轻松实现网站多语言支持,拓展全球市场,st ai绘画
AI免费写文章:让创作变得轻松高效
SEO舆情:如何通过有效的舆情管理提升企业品牌形象,seo推广外包提高收录
seo灰帽是什么,灰帽是指什么 ,ai绘画六边形
AI自动生成:开启智能时代的无限可能,ai熊熊图片
seo软件是什么职位,seo用的是什么软件 ,ai感知树
ChatGPT不能加载过去的对话,如何提升你的使用体验?,ai智能衣服
ChatGPT模型进化历程:人工智能的智慧革命,ai 喷枪星空
人工AI软件的未来:智能时代的创新驱动力
SEO差价如何用SEO优化帮助企业实现成本与效益的完美平衡,盐城seo收费贵吗
AI生成文章免费工具,让创作变得轻松又高效,ai安心健
SEO技术如何通过优化提升网站流量与排名,四平网站优化公司
SEO知道:让你的网站在搜索引擎中脱颖而出,水安建设集团网站
SEO策划:让你的网站迅速脱颖而出的秘诀,seo优化和技巧
360ai答题-赋能教育,开启智能学习新纪元,ai 果汁
SEO自己:打造属于你的数字营销利器,微信裂变营销推广软件
ChatGPT中文版下载免费版:智能对话新时代,尽在,ai光波
什么是SEO可以自学吗,seo零基础可以自学吗 ,ai1紫