天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP Array交叉表實現代碼

如果使用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里面。

然后喜歡怎么輸出都可以了

php技術PHP Array交叉表實現代碼,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费A级毛片无码无遮挡 | 免费又黄又硬又爽大片 | 亚洲色无码播放 | 日韩伦理电影秋霞影院 | 九九在线免费视频 | 女人爽到高潮嗷嗷叫视频 | 日韩精品一区二区三区色欲AV | 欧美精品九九99久久在免费线 | 妺妺窝人体色WWW偷窥女厕 | 亚洲免费视频在线观看 | 国产午夜在线精品三级a午夜电影 | 黄得让人湿的片段 | 亚洲人成影院在线播放 | 色哦色哦哦色天天综合 | 一级做a爰片久久毛片一 | 蝴蝶中文娱乐 | 国产亚洲福利精品一区 | 我要色导航 | 诱人的女邻居9中文观看 | 男女肉大捧进出全过程免费 | 麻豆文化传媒一区二区 | 久久精品国产欧美日韩99热 | 亚洲欧美国产旡码专区 | 动漫护士被乳羞羞漫 | 久草色在线 | 国产精品无码中文在线AV | 100国产精品人妻无码 | 色噜噜视频影院 | WWW国产精品人妻一二三区 | 久久精品中文字幕免费 | 无码成人AAAAA毛片含羞草 | 国产精品搬运 | 国产不卡视频在线 | 亚洲人成伊人成综合网久久久 | 香蕉久久夜色精品国产小优 | 亚洲日本乱码中文论理在线电影 | 暖暖 免费 高清 日本视频大全 | 亚洲精品成人AV在线观看爽翻 | 双性大乳浪受噗呲噗呲h总 双性被疯狂灌满精NP | 精品伊人久久 | 边摸边吃奶边做带声音 |