<!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>
 
 
 |