2011-09-08 45 views
0

我需要一些帮助找出这个循环逻辑。我确切地知道我想要做什么,但我似乎无法接近它。帮助找出一些for循环逻辑

这是我目前的代码。

<? 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>&#10003;</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>。我不确定如何在不打印超出需要的情况下执行循环。下面是此代码发生的一个屏幕截图: this makes me cry

我尝试了一些与if(count($ticket['days'])) { }的东西,但没有解决。所以现在我被卡住了。

我意识到这是一个相当模糊的问题,因为我没有在这里提供太多的代码;如果需要的话,我可以提供更多,但有很多事情正在进行,所以我把它保持在最低限度。

在此先感谢。

+0

尝试'回声 “​​$ I - $关键”;'看看表... – k102

回答

1

您打印单元为$票[“天”]每个日期。这就是你得到太多细胞的原因。

试试这个:

<? 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>&#10003;</td>"; 
     } 
     else 
     { 
     echo "<td>--</td>"; 
     } 
     ?> 
    <? endfor; ?> 
    <td align='center'> 
     <input type='button' class='remove' id='remove[ticket][<?= $ticket['ticketID'] ?>]' value='REMOVE' /> 
    </td> 
    </tr> 
<? endforeach; ?> 
+0

你是一个英雄。非常感谢。我从未想过要这样做;每天学习东西:) – cabaret

0

你在循环中有一个循环内的循环:

该位:

<? for($i = 0; $i < $event_details['number_of_days']; $i++): ?> 
    <? foreach($ticket['days'] as $key => $value) 

造成你的问题。

每天['number_of_days'],也就是说X,然后对于每个['days'],也就是说Y,会给你X * Y。

有些门票在['天'中有1天,其他门票在''天']有2天。那些有些人会显示两倍于其他人的列。

对于票5你有1天,所以它显示X列。

门票6你有2天,因此它显示2X列

+0

感谢。这解释了为什么它变得奇怪; D – cabaret