2015-06-05 10 views
5

Dies ist mein Beispiel für Sitzplatzlisten. Ich muss einige Veränderungen der Sitzausrichtung zeigen.Wie man PHP für den Schleifenwert anordnet?

$rows=($data['seat_type']==1)?3:4; 
$cols=round($numofseats /$rows) ; 
$rowCssPrefix= 'row-'; 
$colCssPrefix= 'col-'; 
$seatWidth= 35; 
$seatHeight= 35; 
$seatCss= 'seat'; 
$selectedSeatCss= 'selectedSeat'; 
$selectingSeatCss= 'selectingSeat'; 
$window_rows = ($data['seat_type']==1) ? array(0,2) :array(0,3); 

for ($i = 0; $i < $rows; $i++) { 
    $seat_w=(in_array($i,$window_rows))?'W':'A'; 
    for ($j = 0; $j < $cols; $j++) { 
     $seatNo = ($i + $j * $rows + 1); 
     if($seatNo <= $numofseats) 
     { 
      $className = $seatCss . ' '.$rowCssPrefix .$i.' '.$colCssPrefix .$j;          if($j % $cols==0) echo '<br>'; 
      if(!in_array($seatNo,$booked_seats)) { 
       echo'<li class="' . $className.'" style="top:'. ($i *$seatHeight).'px;left:'. ($j *$seatWidth).'px" title="'.$seatNo.$seat_w.'">'.$seatNo.'<input type="checkbox" name="seat[]" value="'.$seatNo.'-'.$seat_w.'"/></li>'; 
       }else{ 
       $className .= ' '.$selectedSeatCss; 
       echo'<li class="' . $className.'" style="top:'. ($i *$seatHeight).'px;left:'. ($j *$seatWidth).'px">'.$seatNo.'</li>'; 
      } 
     } 
    } 
} 

Ich erhalte das Ergebnis so wie

1 4 7 10 
2 5 8 11 
3 6 9 12 

aber es sollte

1 6 7 12 
2 5 8 11 
3 4 9 10 

sein Wie kann ich so kommen? Dank

+0

Bitte senden Sie den Inhalt der relevanten Variablen – treegarden

+2

die innere Schleife umkehren. –

+2

Tipp für das nächste Mal: ​​versuchen Sie, uns nur den entsprechenden Code zu geben. Haben Sie keine Angst, eine Variable hier oder da zu ändern, um deutlicher zu machen, was Sie meinen. Verwenden Sie Pseudocode, .. Kurz gesagt: Tun Sie alles, damit es für uns (Leser) einfacher ist, Ihren Code besser zu verstehen. :) – Jordumus

Antwort

1

Sie sollten Ihre Sitznummer Berechnung umkehren, wenn Sie eine Nummer für eine ungerade Spalte berechnen.

Veränderung der Berechnungslinie:

$seatNo = (($j % 2) > 0) ? (($rows - $i) + ($j * $rows)) : ($i + $j * $rows + 1); 

Was geschieht hier ist, steuern wir, wenn die Spalte gerade oder ungerade ist durch ($j % 2) > 0; Berechnen Sie dann die Zahl entsprechend.

So sollte der Code wie folgt aussehen:

<?php 

$rows=($data['seat_type']==1)?3:4; 
$cols=round($numofseats /$rows) ; 
$rowCssPrefix= 'row-'; 
$colCssPrefix= 'col-'; 
$seatWidth= 35; 
$seatHeight= 35; 
$seatCss= 'seat'; 
$selectedSeatCss= 'selectedSeat'; 
$selectingSeatCss= 'selectingSeat'; 
$window_rows = ($data['seat_type']==1) ? array(0,2) :array(0,3); 

for ($i = 0; $i < $rows; $i++) { 
    $seat_w=(in_array($i,$window_rows))?'W':'A'; 
    for ($j = 0; $j < $cols; $j++) { 
     // If we are on the first (or 3rd, 5th, odd numbers) column, normally continue numbering, 
     // But if we are on an even column, reverse the numbering by (($rows - $i) + ($j * $rows)). 
     $seatNo = (($j % 2) > 0) ? (($rows - $i) + ($j * $rows)) : ($i + $j * $rows + 1); 
     if($seatNo <= $numofseats) 
     { 
      $className = $seatCss . ' '.$rowCssPrefix .$i.' '.$colCssPrefix .$j;          if($j % $cols==0) echo '<br>'; 
      if(!in_array($seatNo,$booked_seats)) { 
       echo'<li class="' . $className.'" style="top:'. ($i *$seatHeight).'px;left:'. ($j *$seatWidth).'px" title="'.$seatNo.$seat_w.'">'.$seatNo.'<input type="checkbox" name="seat[]" value="'.$seatNo.'-'.$seat_w.'"/></li>'; 
       } 
       else { 
       $className .= ' '.$selectedSeatCss; 
       echo'<li class="' . $className.'" style="top:'. ($i *$seatHeight).'px;left:'. ($j *$seatWidth).'px">'.$seatNo.'</li>'; 
      } 
     } 
    } 
} 

?> 
1

Die entsprechende Zeile Ich gehe davon ist

for ($i = 0; $i < $rows; $i++) { 
    for ($j = 0; $j < $cols; $j++) { 
     $seatNo = ($i + $j * $rows + 1); 
    } 
} 

Um eine „umgekehrte Effekt“ zu erhalten, fügen Sie einfach ein, wenn die Bedingung zu jeder ungeraden Spalte.

for ($i = 0; $i < $rows; $i++) { 
    for ($j = 0; $j < $cols; $j++) { 
     if ($j % 2 == 1) $seatNo = (($rows - $i) + $j * $rows); 
     else $seatNo = ($i + $j * $rows + 1); 
    } 
} 
Verwandte Themen