2015-06-05 11 views
5

Oto mój przykład uzgodnień z listą miejsc. Muszę pokazać niektóre zmiany wyrównania siedziska.Jak ustawić PHP na wartość w pętli?

$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>'; 
      } 
     } 
    } 
} 

Więc ja dostaję wynik jak

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

ale powinno być

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

Jak mogę uzyskać w ten sposób? Dzięki

+0

proszę pisać treść odpowiednich zmiennych – treegarden

+2

Rewers wewnętrzną pętlę. –

+2

wskazówka na następny raz: spróbuj podać tylko odpowiedni kod. Nie bój się zmieniać tu i tam, aby lepiej określić, co masz na myśli. Użyj pseudokod, .. W skrócie: rób wszystko, aby ułatwić nam (czytelnikom) lepsze zrozumienie twojego kodu. :) – Jordumus

Odpowiedz

1

Należy odwrócić siedziska obliczenia Liczba jeśli obliczania liczby nieparzystej dla kolumnie.

dokonać korekty kalkulacji do:

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

Co się dzieje tutaj jest taka, że ​​kontrolują, czy kolumna jest parzysty, czy nieparzysty przez ($j % 2) > 0; następnie obliczając odpowiednio liczbę.

więc kod powinien wyglądać tak:

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

Odpowiednia linia Zakładam jest

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

W celu uzyskania efektu „reverse”, wystarczy dodać if warunek do każdej kolumny nieparzyste.

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); 
    } 
} 
Powiązane problemy