【问题标题】:Create multiple columns in table based on the first rows output根据第一行输出在表中创建多列
【发布时间】:2018-10-06 13:12:57
【问题描述】:

我刚刚设置了一个简单的 PHP 脚本,它根据今天的日期回显 10 周,向前 5 周,向后 5 周。

第一个<TR> 就像一个魅力,它呼应了所有<TD> 和相应的星期数。问题是我希望它在多行中回显周数,然后查找该周报告的小时数。我怎么可能从第一个 <TR> 复制 <TD> 的数量并在每一行中保留 $from 的值,以便我可以在以后计算那一周的小时数?

当前输出:

-------------------------------------------------------------------------
/  *******  / W10 / W11 / W12 / W13 / W14 / W15 / W16 / W17 / W18 / W19 /                    
-------------------------------------------------------------------------
/ PROJECT 1 / 
-------------------------------------------------------------------------

我想得到的输出:

[-5 WEEKS] / [+5 WEEKS]
-------------------------------------------------------------------------
/  *******  / W10 / W11 / W12 / W13 / W14 / W15 / W16 / W17 / W18 / W19 /                    
-------------------------------------------------------------------------
/ PROJECT 1 /  1h /  4h /  1h /  4h /  3h /  8h /  3h /  4h /  1h /  8h /
-------------------------------------------------------------------------
/ PROJECT 2 /  4h /  2h /  2h /  1h /  8h /  3h /  8h /  3h /  4h /  7h /
-------------------------------------------------------------------------
/ PROJECT 3 /  1h /  3h /  4h /  1h /  5h /  2h /  7h /  1h /  7h /  5h /
-------------------------------------------------------------------------

我的代码:

<?php
//Get current date, and go 5w forward
$now = new DateTime;
$now->modify("+5 week");

//Get current date, and go 5w backward
$from = new DateTime;
$from->modify("-5 week");
$from->modify("thursday this week"); // see ISO 8601 

echo '<table class="view-calendar" cellspacing="0" cellpadding="0" border="0">';
    echo '<tbody>';
        //The first row with week numbers
        echo '<tr>';
            echo '<td style="background: #f2f2f2">';
                echo '';
            echo '</td>';
            while($from < $now) {
                echo '<td valign="top">';
                    echo 'v'.$from->format('W');
                echo '</td>';
            $from->modify("+1 week");
            }
        echo '</tr>';
        //The rest of the rows with project hours in each column
        echo '<tr>';
            echo '<td>';
                echo 'Project 1';
            echo '</td>';
            // ECHO THE REST OF <TD> based on week from first row
        echo '</tr>';
    echo '</tbody>';
echo '</table>';
?>

【问题讨论】:

  • 数据“Project 1”和“1h”从何而来,以什么形式出现?
  • @Jeff:现在只能手动输入,以后应该是来自sql。
  • 基本上你只需要退回$from 并再次循环。其余的取决于实际数据的样子。理想情况下,您应该有一个二维数组 $projects['id']['weeknumber'] = $hours,这样可以根据循环中的周数轻松获取数据。
  • @Jeff,真的!试过了,它有效。您希望它成为解决方案吗?然后把它作为一个帖子,我会把它标记为完成!

标签: php


【解决方案1】:

希望对你有帮助

<?php
//Get current date, and go 5w forward
$now = new DateTime;
$now->modify("+5 week");

//Get current date, and go 5w backward
$from = new DateTime;
$from->modify("-5 week");
$from->modify("thursday this week"); // see ISO 8601 

echo '<table class="view-calendar" cellspacing="0" cellpadding="0" border="1">';
    echo '<tbody>';
        //The first row with week numbers
        echo '<tr>';
            echo '<td style="background: #f2f2f2">';
                echo '';
            echo '</td>';
            while($from < $now) {
                echo '<td valign="top">';
                    echo 'v'.$from->format('W');
                echo '</td>';
            $from->modify("+1 week");
            }
        echo '</tr>';
        //The rest of the rows with project hours in each column
        $project=1;
        while($project<10) {
            echo '<tr>';
                echo '<td>';
                    echo 'Project '.$project;
                echo '</td>';
                $from->modify("-11 week");
                   while($from < $now) {
                    echo '<td valign="top">';
                        echo 'v'.$from->format('W');
                    echo '</td>';
                $from->modify("+1 week");
                }
                // ECHO THE REST OF <TD> based on week from first row
            echo '</tr>';
            $project++;
        }
    echo '</tbody>';
echo '</table>';
?>

【讨论】:

    【解决方案2】:

    我不确定我是否理解您在每个单元格中想要的内容,但是这样的内容会为您提供结构。

    <snip> 
    for ($i=1, $i<4, $i++) {  
    echo '<tr>';
                echo '<td>';
                    echo 'Project ' . $i;
                echo '</td>';
                from->modify("-10 week");
                while($from < $now) {
                    echo '<td valign="top">';
                    //This is where I don't understand what you want. Where is the hourly data coming from?
                    echo 'v'.$from->format('W');
                    echo '</td>';
                    $from->modify("+1 week");
                }
        echo '</tr>';
        }
    <snip>
    

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      相关资源
      最近更新 更多