Dynamic Table

Create a Table.php in /applications/controllers/ directory.

<?php

class Table extends CI_Controller {
    public function __construct() {
        parent::__construct();
    }

    public function index() {
        $data = [
            0   => [
                'level1'    => 'System',
                'level2'    => 'System Apps',
                'level3'    => 'System Env',
                'info'      => 'App Test',
                'name'      => 'Foo'
            ],
            1   => [
                'level1'    => 'System',
                'level2'    => 'System Apps',
                'level3'    => 'System Env',
                'info'      => 'App Memory',
                'name'      => 'Bar'
            ],
            2   => [
                'level1'    => 'System',
                'level2'    => 'System Apps',
                'level3'    => 'System Env',
                'info'      => 'App Details',
                'name'      => 'Foobar'
            ],
            3   => [
                'level1'    => 'System',
                'level2'    => 'System Apps',
                'level3'    => 'System Env2',
                'info'      => 'App Test 2',
                'name'      => 'Foo1'
            ],
            4   => [
                'level1'    => 'System',
                'level2'    => 'System Memory',
                'level3'    => 'Memory Test',
                'info'      => 'App Function',
                'name'      => 'bar1'
            ],
            5   => [
                'level1'    => 'System',
                'level2'    => 'System Memory',
                'level3'    => 'Memory Test',
                'info'      => 'App Test',
                'name'      => 'Foobar Test'
            ],
        ];

        $i = 0;
        $rowspans = array();

        echo '<table border="1">';
        foreach($data as $index => $row) {
            if($i == 0) {
                echo '<tr>';
                foreach (array_keys($row) as $field) {
                    $rowspans[$field] = 1;
                    echo '<th>'.$field.'</th>';
                }
                echo '</tr>';
            }

            echo '<tr>';
            foreach ($row as $field => $value) {
                if($rowspans[$field] == 1) {
                    $nextIndex = $index + 1;
                    while (!empty($data[$nextIndex][$field]) && 
                        $value == $data[$nextIndex][$field]) {
                        $nextIndex++;
                        $rowspans[$field]++;
                    }
                    echo '<td rowspan="'.$rowspans[$field].'">'.$value.'</td>'; 
                } else {
                    $rowspans[$field]--;
                }
            }    
            echo '</tr>';   
            $i++;
        }
        echo '</table>';
    }
}

?>