首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用排序array_chunk

使用排序array_chunk
EN

Stack Overflow用户
提问于 2017-07-20 23:12:40
回答 2查看 218关注 0票数 0

我正在尝试生成一个年表,每个年表被分成5年一组。我希望每次排序5年,就像在示例中期望的输出...This是我到目前为止得到的。

代码语言:javascript
复制
    <?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>";

电流输出

代码语言:javascript
复制
2017    2016    2015    2014    2013
test    test    test    test    test
2012    2011    2010    2009    2008
test    test    test    test    test
2007    2006
test    test

期望输出

代码语言:javascript
复制
2013    2014    2015    2016    2017
test    test    test    test    test
2008    2009    2010    2011    2012
test    test    test    test    test
2006    2007
test    test

编辑:

我试过了

代码语言:javascript
复制
<?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>";

输出

代码语言:javascript
复制
2007    2006
test    test
2012    2011    2010    2009    2008
test    test    test    test    test
2017    2016    2015    2014    2013
test    test    test    test    test
EN

回答 2

Stack Overflow用户

发布于 2017-07-20 23:56:03

并不是说这种方式一定会更好,但仅供参考,您可以在没有任何数组或分块或反转的情况下做到这一点。从初始定义的值开始:

代码语言:javascript
复制
$chunkSize = 5;
$starting_year  = 2006;
$ending_year    = date("Y");

确定需要多少行

代码语言:javascript
复制
$rows = ceil(($ending_year - $starting_year) / $chunkSize);

然后使用for循环迭代该数量的行。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-07-20 23:27:55

代码语言:javascript
复制
 <?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>";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45218759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档