帮助找出一些for循环逻辑

时间:2011-09-08 07:43:51

标签: php arrays loops for-loop foreach

我需要一些帮助来找出这个循环逻辑。我确切地知道自己想要做什么,但遗憾的是我无法达到目的。

这是我目前的代码。

<? 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'])) { }的一些东西但是没有成功。所以现在我被卡住了。

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

提前致谢。

2 个答案:

答案 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>&#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; ?>

答案 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列