I'm trying to generate a table of years that is split into groups of 5 years each. i would like it to be sort 5 years each like in the example desired output ...This is what I got so far.
<?php
$chunkSize = 5;
$starting_year = 2006;
$ending_year = date("Y");
//create an array of years
$years = range($ending_year,$starting_year);
//[2006,2007,....,2016,2017]
//split years in required size
$chunked = array_chunk($years,$chunkSize);
//[ [2013,....,2017], [2008,...2012], [2006,2007]]
echo "<table class='table table-striped table-bordered'><tbody>";
foreach($chunked as $chunk) {
echo "<tr>";
foreach($chunk as $year) {
echo "<th>{$year}</th>";
}
echo "</tr><tr>";
foreach($chunk as $year) {
echo "<td>test</td>";
}
echo "</tr>";
}
echo "</tbody></table>";
Current Output
2017 2016 2015 2014 2013
test test test test test
2012 2011 2010 2009 2008
test test test test test
2007 2006
test test
Desired Output
2013 2014 2015 2016 2017
test test test test test
2008 2009 2010 2011 2012
test test test test test
2006 2007
test test
edit:
i tried
<?php
$chunkSize = 5;
$starting_year = 2006;
$ending_year = date("Y");
//create an array of years
$years = range($ending_year,$starting_year);
//[2006,2007,....,2016,2017]
//split years in required size
$chunked = array_chunk($years,$chunkSize);
//[ [2013,....,2017], [2008,...2012], [2006,2007]]
//reverse it
$reversed = array_reverse($chunked);
echo "<table class='table table-striped table-bordered'><tbody>";
foreach($reversed as $reverse) {
echo "<tr>";
foreach($reverse as $year) {
echo "<th>{$year}</th>";
}
echo "</tr><tr>";
foreach($reverse as $year) {
echo "<td>test</td>";
}
echo "</tr>";
}
echo "</tbody></table>";
output
2007 2006
test test
2012 2011 2010 2009 2008
test test test test test
2017 2016 2015 2014 2013
test test test test test
<?php
$chunkSize = 5;
$starting_year = 2006;
$ending_year = date("Y");
//create an array of years
$years = range($ending_year,$starting_year);
//[2006,2007,....,2016,2017]
//split years in required size
$chunked = array_chunk($years,$chunkSize);
//[ [2013,....,2017], [2008,...2012], [2006,2007]]
echo "<table class='table table-striped table-bordered'><tbody>";
foreach($chunked as $chunk) {
$chunk = array_reverse($chunk);
echo "<tr>";
foreach($chunk as $year) {
echo "<th>{$year}</th>";
}
echo "</tr><tr>";
foreach($chunk as $year) {
echo "<td>test</td>";
}
echo "</tr>";
}
echo "</tbody></table>";
Not that this way is any better necessarily, but just FYI you can do this without any arrays or chunking or reversing. Starting with your initially defined values:
$chunkSize = 5;
$starting_year = 2006;
$ending_year = date("Y");
Determine how many rows you'll need
$rows = ceil(($ending_year - $starting_year) / $chunkSize);
Then iterate for that number of rows with a for loop.
for ($i = 0; $i < $rows; $i++) {
// determine the starting year for the current row
$start = max($starting_year, $ending_year - $chunkSize + 1);
// output the th and td rows for each row
for ($td = 0; $td < 2; $td++) {
// output the years and 'test' values for the current row
echo '<tr>';
for ($year = $start; $year <= $ending_year; $year++) {
echo $td ? '<td>test</td>' : "<th>$year</th>";
}
echo '</tr>';
}
// decrement the ending year for the next iteration
$ending_year -= $chunkSize;
}