我需要一些帮助来找出这个循环逻辑。我确切地知道自己想要做什么,但遗憾的是我无法达到目的。
这是我目前的代码。
<? foreach($ticket_details as $ticket): ?>
<tr class="tableBG" style="background-color: #fc6">
<td align="center"><?= $ticket['name']; ?></td>
<td align="center"><?= $ticket['price']; ?></td>
<td align="center"><?= $ticket['priceWithinAllocation']; ?></td>
<? for($i = 0; $i < $event_details['number_of_days']; $i++): ?>
<?
foreach($ticket['days'] as $key => $value)
{
if($value == date('Y-m-d', strtotime($event_details['startDate'] . "+ $i day")))
{
echo "<td>✓</td>";
}
else
{
echo "<td>--</td>";
}
}
?>
<? endfor; ?>
<td align='center'>
<input type='button' class='remove' id='remove[ticket][<?= $ticket['ticketID'] ?>]' value='REMOVE' />
</td>
</tr>
<? endforeach; ?>
这不起作用。
我的门票数组如下所示:
[5] => Array
(
[ticketID] => 5
[eventID] => 1
[name] => Thu
[price] => 500
[priceWithinAllocation] => 250
[day] => 2011-08-25
[days] => Array
(
[0] => 2011-08-25
)
)
[6] => Array
(
[ticketID] => 6
[eventID] => 1
[name] => Wed+Thu
[price] => 900
[priceWithinAllocation] => 110
[day] => 2011-08-24
[days] => Array
(
[0] => 2011-08-24
[1] => 2011-08-25
)
)
当$ticket['days']
包含多个值时,会打印出太多空( - )<td>
。我不知道如何在没有打印超过我需要的情况下进行循环。以下是此代码所发生情况的屏幕截图:
我尝试了if(count($ticket['days'])) { }
的一些东西但是没有成功。所以现在我被卡住了。
我意识到这是一个相当含糊的问题,因为我在这里没有提供太多代码;如果需要,我可以提供更多,但有很多东西正在进行,所以我把它保持在最低限度。
提前致谢。
答案 0 :(得分:1)
您在$ ticket ['days']中为每个日期打印一个单元格。这就是你得到太多细胞的原因。
试试这个:
<? foreach($ticket_details as $ticket): ?>
<tr class="tableBG" style="background-color: #fc6">
<td align="center"><?= $ticket['name']; ?></td>
<td align="center"><?= $ticket['price']; ?></td>
<td align="center"><?= $ticket['priceWithinAllocation']; ?></td>
<? for($i = 0; $i < $event_details['number_of_days']; $i++): ?>
<?
$foundDate = false;
foreach($ticket['days'] as $key => $value)
{
if($value == date('Y-m-d', strtotime($event_details['startDate'] . "+ $i day")))
{
$foundDate = true;
}
}
if($foundDate)
{
echo "<td>✓</td>";
}
else
{
echo "<td>--</td>";
}
?>
<? endfor; ?>
<td align='center'>
<input type='button' class='remove' id='remove[ticket][<?= $ticket['ticketID'] ?>]' value='REMOVE' />
</td>
</tr>
<? endforeach; ?>
答案 1 :(得分:0)
你在循环中的循环中有一个循环:
这一点:
<? for($i = 0; $i < $event_details['number_of_days']; $i++): ?>
<? foreach($ticket['days'] as $key => $value)
导致问题。
对于['number_of_days']中的每一天,也就是说X,然后对于每个['天'],比方说Y,将给你X * Y.
某些门票在['天']有1天,有些门在['天']有2天。有些人会显示两倍于其他人的列。对于5号机票,你有1天,所以它显示X列。
对于6号机票,您有2天的时间,因此它显示2X列