| 
<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
 </head>
 <body>
 <?php
 // This example results in
 // 1 Html table with some pretty hierarchy
 // 2 "pretty" array
 // 3 plain print_r of result
 include "GroupBy.class.php";
 
 $dataRows     = [
 [1, "Andy", "PHP", "4"],
 [1, "Andy", "C#", "6"],
 [2, "Josh", "C#", "6"],
 [2, "Josh", "ASP", "4"],
 [1, "Andy", "SQL", "6"],
 [3, "Steve", "SQL", "2"],
 [4, "self", "SQL", "30"],
 [4, "self", "Smalltalk", "5"],
 [4, "self", "C", "33"],
 [4, "self", "Swedish", "65"]
 ];
 // Group on the third column
 $res             = (new GroupBy())->groupBy($dataRows, [ 2 ]);
 
 // Group on  Years and Language
 //                        $res             = (new GroupBy())->groupBy($dataRows, [ 3, 2 ]);
 // You get an array back
 // Each row contains two arrays
 //  First array: The key as an array of columns values
 //  Second array: An array of all rows to this key
 
 
 // The above call [ 2 ] will result in
 // (pasted from output of this test)
 $x = [
 [
 ["ASP"],
 [
 ["2", "Josh", "4"]
 ]
 ],
 [
 ["C"],
 [
 ["4", "self", "33"]
 ]
 ],
 [
 ["C#"],
 [
 ["1", "Andy", "6"],
 ["2", "Josh", "6"]
 ]
 ],
 [
 ["PHP"],
 [
 ["1", "Andy", "4"]
 ]
 ],
 [
 ["SQL"],
 [
 ["1", "Andy", "6"],
 ["3", "Steve", "2"],
 ["4", "self", "30"]
 ]
 ],
 [
 ["Smalltalk"],
 [
 ["4", "self", "5"]
 ]
 ],
 [
 ["Swedish"],
 [
 ["4", "self", "65"]
 ]
 ]
 ];
 // Usage (dummy)
 foreach ($res as $aGroup)
 {
 $groupKey     = $aGroup[0];
 $groupRows = $aGroup[1];
 foreach ($groupRows as $groupRow)
 {
 // We got all columns in  $groupRow
 // (And the key cols in $groupKey
 }
 }
 // Display as a HTML table
 
 echo "<code><table border='1'>";
 $runningLinenumber = 1;
 foreach ($res as $aGroup)
 {
 $groupKey     = $aGroup[0];
 $groupRows = $aGroup[1];
 // first row. calc rowspan
 echo "<tr>";
 echo "<td>" . $runningLinenumber++ . "</td>"; // optional. but nice for user row interaction
 echo "<td rowspan='" . count($groupRows) . "' valign=\"top\">" . implode(",", $groupKey) . "</td>";
 echo "<td>" . implode("</td><td>", $groupRows[0]) . "</td>";
 echo "</tr>";
 // end first row
 for ($r = 1; $r < count($groupRows); ++$r)
 {
 $groupRow = $groupRows[$r];
 echo "<tr>";
 echo "<td>" . $runningLinenumber++ . "</td>"; // optional
 echo "<td>" . implode("</td><td>", $groupRow) . "</td>";
 echo "</tr>";
 }
 echo "</tr>";
 }
 echo "</table></code>";
 
 // Display as php array initial (copy and paste from the output)
 
 echo '<pre>';
 echo "[\n";
 $keyAndData = [];
 for ($grpNr = 0; $grpNr < count($res); ++$grpNr)
 {
 $groupKey     = $res[$grpNr][0];
 $keyTTY         = '"' . implode('","', $groupKey) . '"';
 echo " [\n";
 echo "  [" . $keyTTY . "],\n";
 echo "  [\n";
 $groupRows = $res[$grpNr][1];
 for ($rowNr = 0; $rowNr < count($groupRows); ++$rowNr)
 {
 $groupRow     = $groupRows[$rowNr];
 $aRow             = '"' . implode('","', $groupRow) . '"';
 echo "   [" . $aRow . "]";
 if ($rowNr != count($groupRows) - 1)
 echo ",\n";
 else
 echo "\n";
 }
 echo "  ]\n";
 echo " ]";
 if ($grpNr != count($res) - 1)
 echo ",\n";
 else
 echo "\n";
 }
 echo "]\n";
 echo print_r($res, true);
 echo '</pre>';
 ?>
 </body>
 </html>
 
 |