我正在尝试生成一个年份表,每个表分为5年组。我希望它在每个例子中都是5年,就像示例所需的输出一样......这就是我到目前为止所做的。
<?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>";
当前输出
2017 2016 2015 2014 2013
test test test test test
2012 2011 2010 2009 2008
test test test test test
2007 2006
test test
期望输出
2013 2014 2015 2016 2017
test test test test test
2008 2009 2010 2011 2012
test test test test test
2006 2007
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]]
//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>";
输出
2007 2006
test test
2012 2011 2010 2009 2008
test test test test test
2017 2016 2015 2014 2013
test test test test test
答案 0 :(得分:1)
并不是说这种方式更好,但仅仅是因为你可以在没有任何阵列或分块或反转的情况下做到这一点。从最初定义的值开始:
$chunkSize = 5;
$starting_year = 2006;
$ending_year = date("Y");
确定您需要的行数
$rows = ceil(($ending_year - $starting_year) / $chunkSize);
然后使用for循环迭代该行数。
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;
}
答案 1 :(得分:0)
<?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>";