Home > Backend Development > PHP Tutorial > arraynetworks PHP Array crosstab implementation code

arraynetworks PHP Array crosstab implementation code

WBOY
Release: 2016-07-29 08:43:26
Original
1133 people have browsed it

If you use sql statements to do it, the workload will be too much, so I try to write a crosstab class by myself. Without further ado, let’s take a look at the code

Copy the code The code is as follows:


/**
* Basic Crosstab
* @author hugh
*
*/
class Pivot
{
private $HORIZONTAL_TOTAL_FIELD = 'total';
private $VERTICAL_TOTAL_FIELD = 'total';
private $data;
private $topPivot;
private $leftPivot;
private $measure;
private $hor izontalColumn = array ();
private $verticalColumn = array ();
private $pivotValue = array ();
private $isHorizontalTotal = true;
private $isVerticalTotal = true;
private $horizontalTotal = null;
private $verticalTotal = null ;
private $title = 'PivotTab';
/**
* Initialize crosstab
*/
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;
}
}
}
/**
* Fill in data
* /
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 ();
}
}
/**
* Set vertical total
*/
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;
}
}
/**
* Set horizontal total
*/
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;
}
}
/**
* Rendering
*/
function Render()
{
echo '

'; 
print_r ( $this->pivotValue );
}
/**
* Render as table
*/
function RenderToTable()
{
$resault = "n";
$resault .= "n";
foreach ( $this->verticalColumn as $value )
{
$resault .= "n";
}
$ resault .= "n";
foreach ( $this->horizontalColumn as $i )
{
$resault .= "n";
foreach ( $this->pivotValue [$i] as $value )
{
$resault .= "n";
}
$resault .= "}
$resault .= "
$ this->title$value
$i$value
";
return $resault;
}
/**
* Construct a crosstab
* @param $data data source
* @param $topPivot header column field
* @param $leftPivot left column field
* @param $measure calculation amount
*/
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 ();
}
}


Key Points It lies in the InitPivot method and fillData method.
InitPivot ensures that all items will have values ​​(default is 0)
fillData method uses the method of selecting and filling to fill the data into the $pivotValue where we install the data.
Then you can output it however you like.

The above introduces the implementation code of arraynetworks PHP Array crosstab, including the content of arraynetworks. I hope it will be helpful to friends who are interested in PHP tutorials.

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template