简体   繁体   中英

Create multiple html tables with associative array in PHP

I have an array of arrays and accessing the data is fine, but when I try to create separate tables based on a key, which is set to the numeric month that the data pulled from the database falls under.

I have: 
array(1) {
  [5]=>
  array(12) {
    ["ID"]=>
    string(5) "1001"
    ["created_timestamp"]=>
    string(26) "2015-06-11 19:10:00"
    ["firstname"]=>
    string(4) "John"
    ["lastname"]=>
    string(3) "Doe"
  }
}
array(1) {
  [5]=>
  array(12) {
    ["ID"]=>
    string(5) "1002"
    ["created_timestamp"]=>
    string(26) "2015-06-12 19:10:00"
    ["firstname"]=>
    string(4) "Jane"
    ["lastname"]=>
    string(3) "Doe"
  }
}
array(1) {
  [6]=>
  array(12) {
    ["ID"]=>
    string(5) "1003"
    ["created_timestamp"]=>
    string(26) "2015-07-16 19:20:00"
    ["firstname"]=>
    string(4) "John"
    ["lastname"]=>
    string(4) "John"
  }
}

The [5] Represents the current month -1. What I want to do is create a table and headers but only once, then populate the table with first and last name.

foreach($m as $key => $value)
            {
                if(key($m) != $currentKey)
                {
                    $currentKey = key($m);
                }
                if($key == date("n", strtotime($value['created_timestamp']))-1);
                {
                    for($i=$currentKey; $i<=$lastkey; $i++) {
                        echo "<br>".count($key);
                        $table .= '<table id=' . date("F-Y", strtotime($m[$currentKey]['created_timestamp'])) . ' class="tblclass">
                        <thead><tr><th>Month</th><th>ID</th><th>Customer</th></tr></thead>';
                        $table .= '<tbody>';
                        $table .= '<tr><td>'.date("F Y", strtotime($m[$currentKey]['created_timestamp'])).'</td><td>' . $value['ID'] . '</td><td>' . $value['lastname'] . ' ' . $value['firstname'] . '</td></tr>';

                        $table .= '</tbody>';
                        $table .= '</table>';
                    }
                }
            }

Whenever I run the code it creates a table for each separate array. I want to create one table for each separate month and populate it with anything with the same key. I feel like I'm missing something though. Any help would be greatly appreciated!

A dirty solution. Since info is lacking
Here are a few assumptions:
- Array is sorted in ASC order
- There is only one item in each array [ID, Name, Timestamp]
- IF there are more items, then you can just add a loop in there
- $m is the multi-dimensional array.
NOTE: Not tested.

$currentKey = 0;
$count= 0;
$lastKey = count($m) - 1;

foreach($m as $key => $value) {

    if(key($m) != $currentKey) {
        $currentKey = key($m);

        if($count== 0) {
            echo "<br>".count($key);
            $table .= '<table id=' . date("F-Y", strtotime($m[$currentKey]['created_timestamp'])) . ' class="tblclass">
            <thead><tr><th>Month</th><th>ID</th><th>Customer</th></tr></thead>';
            $table .= '<tbody>';
        } else {            
            $table .= '</tbody>';
            $table .= '</table>';
            $table .= '<table id=' . date("F-Y", strtotime($m[$currentKey]['created_timestamp'])) . ' class="tblclass">
            <thead><tr><th>Month</th><th>ID</th><th>Customer</th></tr></thead>';
            $table .= '<tbody>';
        }
    }

    if($key == date("n", strtotime($value['created_timestamp']))-1) {
        $table .= '<tr><td>'.date("F Y", strtotime($value['created_timestamp'])).'</td><td>' . $value['ID'] . '</td><td>' . $value['lastname'] . ' ' . $value['firstname'] . '</td></tr>';
    }

    if($lastKey == $count) {
        $table .= '</tbody>';
        $table .= '</table>';
    }

    $count++;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM