繁体   English   中英

html表并用空行的php填充

[英]html table and populate with php with empty rows

我正在尝试用数据填充表格。 我想实现一些看起来像 在此处输入图片说明

但是,我的结果是:

在此处输入图片说明

我想这可能与php IF语句有关。

这是我的代码:

<table class="tg">
    <tr>
        <th class="tg-s6z2" colspan="2" rowspan="4">OPPONENT</th>
        <th class="tg-s6z2" colspan="5">DIVISION</th>
    </tr>
    <tr>
        <td class="tg-s6z2" colspan="5">TEAM</td>
    </tr>
    <tr>
        <?php  
        foreach($rows as $row) {
            echo "<td class='tg-031e' colspan='2'>";
            echo $row["Date"];
            echo "</td>";
        }           
        ?>
    </tr>
    <tr>
    </tr>
    <?php  
        foreach($rows as $row) {
            echo"<tr>";
            echo "<td class='tg-031e' colspan='2'>";
            echo $row["teamName"];
            echo "</td>";

            if(!empty($row["Score"])){
                echo"<td>";
                echo$row["Score"];  
                echo "</td>";
            }else{
                echo "<td>&nbsp;</td>";
            }
            echo"</tr>";
        }           
    ?>  
</table>

$results输出

Array ( 
    [0] => Array ( 
        [Date] => 2015-04-22 
        [0] => 2015-04-22 
        [Score] => 1:4 
        [1] => 1:4 
        [divisionID] => 2 
        [2] => 2 
        [3] => 2 
        [teamName] => TEAM YXZ 
        [4] => TEAM XYZ ) 
    [1] => Array ( 
        [Date] => 2015-04-15 
        [0] => 2015-04-15 
        [Score] => 2.5:2.5 
        [1] => 2.5:2.5 
        [divisionID] => 2 
        [2] => 2 
        [3] => 2 
        [teamName] =>  TEAM XYZ 'B' 
        [4] => TEAM XYZ 'B' 
    ) 
)

您检查$row['score']条件语句说添加TD或不带分数的TD 无论它是否为空白,您仍然都需要添加TD ,否则它将破坏表的布局。

另外,您获得的数据是否足够用于循环填充整个表的数据? 在我看来,与条件语句一起返回的数据有什么问题。

您需要遍历列标题的日期,检查$rows的当前元素是否与相应的日期匹配。 创建标题时,首先对所有日期进行排列:

    $dates = array();
    foreach($rows as $row) {
        echo "<td class='tg-031e' colspan='2'>";
        echo $row["Date"];
        $dates[] = $row['Date'];
        echo "</td>";
    }           

然后,当您写行时,循环浏览日期。 当匹配时,写下分数,否则将<td>留为空白(无需写&nbsp; )。

    foreach($rows as $row) {
        echo"<tr>";
        echo "<td class='tg-031e' colspan='2'>";
        echo $row["teamName"];
        echo "</td>";
        foreach ($dates as $date) {
            echo "<td>";
            if ($row['Date'] == $date && !empty($row['Score'])) {
                echo $row["Score"];
            }
            echo "</td>";
        }
        echo"</tr>";
    }  

您提供的示例图像与$rows的数据不对应。 2015-04-22的比赛应该得到1:4的比分对吗?

我已经将逻辑与HTML分开了。

在我看来, $rows的构造方式通常是错误的设计。

考虑到这一点; 这就是我想出的

<?php

$dates = array();
foreach ($rows as $row):
    $dates[] = $row['Date'];
endforeach;

$matches = array();
foreach ($rows as $row):
    $scores = array();
    foreach ($dates as $date):
        $score = '';
        if (!empty($row['Score']) && $row['Date'] === $date):
            $score = $row['Score'];
        endif;
        $scores[] = $score;
    endforeach;
    $matches[] = array('teamName' => $row['teamName'], 'Scores' => $scores);
endforeach;
?>

<table class="tg">
    <tr>
        <th class="tg-s6z2" colspan="2" rowspan="4">OPPONENT</th>
        <th class="tg-s6z2" colspan="5">DIVISION</th>
    </tr>
    <tr>
        <td class="tg-s6z2" colspan="5">TEAM</td>
    </tr>
    <tr>
        <?php foreach ($dates as $date): ?>
            <td>
                <?php echo $date; ?>
            </td>
        <?php endforeach; ?>
    </tr>
    <tr>
    </tr>
    <?php foreach ($matches as $match): ?>
        <tr>
            <td class="tg-031e" colspan="2">
                <?php echo $match['teamName']; ?>
            </td>
            <?php foreach ($match['Scores'] as $score): ?>
                <td><?php echo $score; ?></td>
            <?php endforeach; ?>
        </tr>
    <?php endforeach; ?>
</table>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM