ホームページ >php教程 >php手册 >PHP 配列クロス集計の実装コード

PHP 配列クロス集計の実装コード

WBOY
WBOYオリジナル
2016-06-13 12:14:03917ブラウズ

SQL ステートメントを使用すると負荷が高すぎるため、クロス集計クラスを自分で作成してみます。早速、コードを見てみましょう。

Copy code コードは次のとおりです。


/**
* 基本的なクロス集計
* @author ヒュー
*
*/
class Pivot
{
private $HORIZONTAL_TOTAL_FIELD = 'total';
private $VERTICAL_TOTAL_FIELD = 'total ';
private $data;
private $leftPivot;
private $horizo​​ntalColumn;
プライベート $verticalColumn = 配列 ();
プライベート $isVerticalTotal = true; 🎜>private $verticalTotal = null;
private $title = 'PivotTab';
/**
* クロス集計を初期化します
*/
プライベート関数 InitPivot()
{
$this-> topPivot;
foreach ( $this ->data as $d )
{
$this->horizo​​ntalColumn [] = $d [$this->leftPivot]; >verticalColumn [] = $d [ $this->topPivot];
$this->horizo​​ntalColumn = array_unique ( $this->horizo​​ntalColumn ); = array_unique ( $this->verticalColumn );
$reasult = array ();
foreach ( $this->horizo​​ntalColumn as $h )
{
foreach ( $this-> verticalColumn as $v )
{
$this->pivotValue [$h] [$v] = 0;
}
}
}
/**
* データを入力
*/
プライベート関数 fillData( )
{
foreach ( $this->data as $row )
{
$this->pivotValue [$row [$this->gt ;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- >horizo​​ntalColumn as $i )
{
$rowsum = 0;
foreach ( $this->verticalColumn as $j )
{
$rowsum = $this->pivotValue [$i] [$j]}
$this->pivotValue [$i] [$this->TOTAL_FIELD] = $rowsum;
}
/ **
* 水平合計を設定します
*/
プライベート関数 set水平合計()
{
$this->horizo​​ntalColumn [] = $this->HORIZONTAL_TOTAL_FIELD
foreach ( $this->verticalColumn as $i )
{
$rowsum = 0;
foreach ( $this->horizo​​ntalColumn 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";
$resault .= "$this-> ;titlen";
foreach ( $this->verticalColumn as $value )
{
$resault .= "
n";
}
$resault .= "n";
foreach ( $this->horizo​​ntalColumn as $i )
{
$resault .= "n";
foreach ( $this->pivotValue [$i] as $value )
{
$resault .= "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-> ;horizo​​ntalColumn = 配列 ();
$this->
$this->; fillData ();
}
}


InitPivot メソッドと fillData メソッドに焦点を当てています。
InitPivot は、すべての項目に値が含まれることを保証します (デフォルトは 0)。
fillData メソッドは、選択および塗りつぶしのメソッドを使用して、データをインストールする $pivotValue にデータを埋めます。

あとは好きなように出力してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
$ value
$i$value< ;/td>n";
}
$resault .= "