使用排序array_chunk

时间:2017-07-20 15:12:40

标签: php arrays sorting

我正在尝试生成一个年份表,每个表分为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

2 个答案:

答案 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>";
相关问题