php foreach休息表

时间:2014-10-14 12:14:08

标签: php foreach tablerow

我使用表来存储动态加载的内容。这是一个响应的预订表格。我想要做的是如果有超过5列的话,将每个表格行分成两行,以便移动版本适合屏幕。

我确信这可以通过扩展我已有的但无法使其工作来实现。

这是我目前的代码:

<table>
    <tr>
        <?php foreach ($hostel->getAvailableDates() as $date): ?>
        <th><?php echo $date->getDayOfTheWeek(); ?></th>
        <?php endforeach ?>
    </tr>
    <tr>
        <?php foreach ($hostel->getAvailableDates() as $date): ?>       
        <td>
        <?php if($date->getAvailable()) { ?>            
            <b class="avail tick">Available</b>
        <?php } else { ?>
            <b class="avail cross">Unavailable</b>
        <?php }?>
        </td>
        <?php endforeach ?>
    </tr>
</table>

我需要在5个循环后打破每行tr的循环,然后在下面添加一个新行。 我一直在试验

$max_loop = 5;
$count = 0; 

但到目前为止没有运气。

4 个答案:

答案 0 :(得分:0)

查看mod运算符。它应该给你你需要的东西。

if($ count%$ max_loop == 0)

答案 1 :(得分:0)

我更喜欢重组数据:

<?php
$availDates = array();
foreach ($hostel->getAvailableDates() as $date) {
    $availDates[] = $date;
}
$maxCols = 5;
$chunked = array_chunk( $availDates, $maxCols );
?>
<table>
    <?php
    foreach ($chunked as $chunk) {
        ?><tr>
        <?php foreach ($chunk as $date): ?>
        <th><?php echo $date->getDayOfTheWeek(); ?></th>
        <?php endforeach; ?>
    </tr>
    <tr>
        <?php foreach ($chunk as $date): ?>       
        <td>
        <?php if($date->getAvailable()) { ?>            
            <b class="avail tick">Available</b>
        <?php } else { ?>
            <b class="avail cross">Unavailable</b>
        <?php }?>
        </td>
        <?php endforeach; ?>
    </tr><?php

    }
    ?>
</table>

答案 2 :(得分:0)

如果getAvailableDates返回的值是一个数组,则可以使用for循环而不是foreach,并检查当前索引是否为5的倍数,因此您不必跟踪计数变量< / p>

$avDates = $hostel->getAvailableDates();
for ($i = 0; $i < count($avDates); $i++)  {
    $date = $avDates[$i];
    //do your staff
    //if multiple of five add another tr
    if ($i % 5 == 0) {

     }
}

答案 3 :(得分:0)

我希望这对你有帮助。感谢。

    <?php

    $avDates = $hostel->getAvailableDates();
    echo "<table><tr>";
    foreach($avDates as $i=>$date){  {
        if ($i == $max_loop) {
            echo "</tr><tr>";
         }
    echo "<td>".($date->getAvailable() ? '<b class="avail tick">Available</b>' : '<b class="avail cross">Unavailable</b>')."</td>";
    }
    echo "</tr></table>";
?>