Помогите разобраться с логикой цикла - PullRequest
0 голосов
/ 08 сентября 2011

Мне нужна помощь, чтобы понять это для логики цикла. Я точно знаю, что хочу сделать, но, к сожалению, никак не могу этого достичь.

Это мой код на данный момент.

<? 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 ]

1 голос
/ 08 сентября 2011

Вы печатаете ячейку для каждой даты в $ 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; ?>
0 голосов
/ 08 сентября 2011

у вас есть цикл внутри цикла внутри цикла:

этот бит:

<? 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 день в ['days'], у других есть 2 дня в ['days']. это то, что некоторые будут показывать в два раза больше столбцов, чем другие.

для билета 5 у вас есть 1 день, поэтому он показывает X столбцов.

для билета 6 у вас есть 2 дня, поэтому он показывает 2X столбцы

...