2015-06-05 48 views
5

這是我的座位列表安排示例。我必須展示一些座位對齊的變化。如何安排PHP for循環值?

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

所以我越來越喜歡

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

的結果,但它應該是

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

我怎樣才能得到這個樣子? 感謝

+0

請張貼相關變量的內容 – treegarden

+2

反向內環。 –

+2

下次提示:儘量只給我們相關的代碼。不要害怕在這裏或那裏改變一個變量,使其更加清楚你的意思。使用僞代碼,..簡而言之:盡一切可能讓我們(讀者)更好地理解您的代碼。 :) – Jordumus

回答

1

,如果你計算的奇數列一些你應該扭轉自己的座位數計算。

更改計算行:

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

什麼發生在這裏,我們控制如果列是奇數還是偶數通過($j % 2) > 0;然後相應地計算數字。

所以,你的代碼應該是這樣的:

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

相關的行我假設是

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

爲了得到一個「反向效應」,簡單地增加一個條件,如果每奇列。

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); 
    } 
}