/**
* 基本的なクロス集計
* @author ヒュー
*
*/
class Pivot
{
private $HORIZONTAL_TOTAL_FIELD = 'total';
private $topPivot;
private $measure;
private $horizontalColumn = 配列();
private $isVerticalTotal = true;プライベート $horizontalTotal = null;
private $title = 'PivotTab';
プライベート関数 InitPivot()
$this->topPivot; $this->data as $d )
{
$this->horizontalColumn [] = $d [$this->leftPivot];
$this->verticalColumn [] = $d [$this-> ;topPivot];
$this->horizontalColumn = array_unique ( $this->verticalColumn );
foreach ( $this->horizontalColumn as $h )
{
foreach ( $this->verticalColumn as $v )
{
$this->pivotValue [$h] [$v] = 0;
}
}
/**
* クロス集計を初期化します
* /
プライベート関数 fillData()
{
foreach ( $this->data as $row )
{
$this->pivotValue [$row [$this- >leftPivot]] [$row [$this- >topPivot]] += $row [$this->measure]
}
if ($this->is水平合計)
{
$this-> set水平合計 ();
}
if ($this->isVerticalTotal)
{
$this->setVerticalTotal ();
}
}
/**
* データを入力してください
*/
プライベート関数 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; }
/**
* 垂直合計を設定します
*/
プライベート関数 set水平Total()
{
$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 );
/**
* レンダリング
*/
function RenderToTable()
{
$resault = "
n"; .= "$ this->title | n";
foreach ( $this->verticalColumn as $value )
{
$resault .= "$ value | n";
}
$ resault .= "
n";
foreach ( $this->horizontalColumn as $i )
{
$resault .= "< ;td>$in";
foreach ( $this->pivotValue [$i] as $value )
{
$resault .= "$value | n";
}
$resault .= "
}
$resault .= "
";
return $resault
/**
* テーブルとしてレンダリングします
*/
function __construct (配列 $data, $topPivot, $leftPivot, $ メジャー)
{
$this->data = $data;
$this->topPivot = $topPivot; $this->measure = $measure;
$this->horizontalColumn = array ();
$this->InitPivot; fillData();
}
}
InitPivot メソッドと fillData メソッドに焦点を当てています。
InitPivot は、すべての項目が値を持つことを保証します (デフォルトは 0)
fillData メソッドは、選択および入力のメソッドを使用して、データをインストールする $pivotValue にデータを入力します。
あとはお好みで出力してください。
http://www.bkjia.com/PHPjc/322362.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/322362.html技術記事 SQL ステートメントを使用すると負荷が高すぎるため、自分でクロス集計クラスを作成してみます。早速、コードを見て、次のコードをコピーします。クロス集計...