如果条件在foreach内

时间:2016-04-20 13:26:24

标签: php

FOREACH循环从预订阵列输出数据。在此循环中,IF条件过滤了几个预订。如果预订日期是今天之后,它会将预订信息输出到表格中。工作正常。

如果将来没有预订,应打印一条消息"将来不会预订"。如果从未进行过预订,这样可以正常工作,但如果过去的预订已经存在,则过去每次预订都会重复此消息。

我该如何防止这种情况?

提前致谢

和Thorsten

<tbody>
<?php if ($tpl['booking_arr']) { ?>
    <?php foreach ($tpl['booking_arr'] as $item) { ?>
    <?php if (date('Ymd', strtotime($item['dt'])) > date('Ymd')) { ?>
        <tr>
            <td>
                <a href="<?php echo $_SERVER['PHP_SELF']; ?>?controller=pjAdminBookings&amp;action=pjActionUpdate&amp;id=<?php echo $item['id']; ?>"><?php echo date($tpl['option_arr']['o_date_format'], strtotime($item['dt']));?></a>
            </td>
            <td style="text-align: center;"><?php echo (int)$item['people'] + (int)$item['children']; ?></td>
        </tr><?php } else { ?>
        <tr>
            <td colspan="2" style="font-size: 10px;">
                keine bevorstehenden Reservierungen
            </td>
        </tr>
    <?php } } }  ?>
        <tr><td style="border-bottom: 1px solid #000;" colspan="2"></td></tr>
        <tr>
            <td class="reg-seit">REG: <?php echo date($tpl['option_arr']['o_date_format'], strtotime($tpl['arr']['created']));?></td>
            <td class="res-seit">RES: <?php $array = $tpl['booking_arr']; $getCount = count($array); echo ($getCount);?> </td>
        </tr>

2 个答案:

答案 0 :(得分:1)

我对PHP知之甚少,但这里有一个想法:不要在foreach循环中放入“没有即将发布的预订”消息,而不必从循环中断开(假设按日期排序)。使用布尔值检查是否有任何未来的预订,默认情况下设置为false,如果找到将来的预订,则设置为true。循环之后,如果没有预订,则打印消息。在伪代码中,

boolean futureBookingsExist = false;
foreach (date in bookingsArray) {
    if (date > currentDate) {
        outputBookingDate();
        futureBookingsExist = true;
    }
}

if (!futureBookingsExist) {
    print("no future bookings exist");
}

答案 1 :(得分:0)

使用foreach打印出该邮件后,您可以暂时退出break块。这是基于$tpl['booking_arr']的内容按日期排序的假设。如果不是,你将不得不对它进行排序。