【问题标题】:Help figuring out some for loop logic帮助弄清楚一些 for 循环逻辑
【发布时间】:2011-09-08 07:43:50
【问题描述】:

我需要一些帮助来弄清楚这个 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'] 包含多个值时,它会打印出太多空 (--) &lt;td&gt;。我不确定如何在不打印超出我需要的内容的情况下进行循环。这是此代码发生的情况的屏幕截图:

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

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

提前致谢。

【问题讨论】:

  • 试试echo "&lt;td&gt;$i--$key&lt;/td&gt;"; 看看表格...

标签: php arrays loops for-loop foreach


【解决方案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; ?>

【讨论】:

  • 你是个英雄。非常感谢。我从没想过会那样做;每天学习一些东西:)
【解决方案2】:

你在一个循环里面有一个循环:

这一点:

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

给你造成问题。

对于 ['number_of_days'] 中的每一天,假设 X,然后对于每个 ['days'],假设 Y,将给您 X*Y。

有些票在 ['days'] 中有 1 天,其他票在 ['days'] 中有 2 天。这就是其中一些将显示两倍于其他列的列。

对于票 5,您有 1 天,因此它显示 X 列。

票 6 你有 2 天,所以它显示 2X 列

【讨论】:

  • 谢谢。这就解释了为什么它变得很奇怪;D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
相关资源
最近更新 更多