SQL 문을 사용해서 하면 작업량이 너무 많아질 것 같아서 제가 직접 크로스탭 클래스를 작성해 보겠습니다. 더 이상 고민하지 말고 코드를 살펴보겠습니다.
복사 code 코드는 다음과 같습니다.
/**
* 기본 크로스탭
* @authorhugh
*
*/
class Pivot
{
private $HORIZONTAL_TOTAL_FIELD = 'total';
private $VERTICAL_TOTAL_FIELD = 'total';
private $topPivot;
private $leftPivot;
private $horizontalColumn = array ();
private $verticalColumn = array ();
private $isHorizontalTotal = true
private $horizontalTotal = null
비공개 $verticalTotal = null;
비공개 $title = 'PivotTab'
/**
* 크로스탭 초기화
*/
비공개 함수 InitPivot()
{
$this-> topPivot;
foreach( $this ->data as $d )
{
$this->horizontalColumn [] = $d [$this->leftPivot]
$this- >verticalColumn [] = $d [ $this->topPivot]
}
$this->horizontalColumn = array_unique ( $this->horizontalColumn ); = array_unique ( $this->verticalColumn );
$reasult = array ()
foreach ( $this->horizontalColumn as $h )
{
foreach ( $this-> $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->isHorizontalTotal)
{
$this->setHorizontalTotal () ;
}
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
}
}
/ **
* 가로 합계 설정
*/
비공개 함수 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 )
}
/**
* 테이블로 렌더링
*/
function RenderToTable( )
{
$resault = "
$ value | n";|
$i | n"$value< ;/td>n"; } $resault .= " |