这是我的座位清单安排的例子。我必须显示一些座位对齐方式。
$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 :(得分:1)
我假设的相关行是
for ($i = 0; $i < $rows; $i++) {
for ($j = 0; $j < $cols; $j++) {
$seatNo = ($i + $j * $rows + 1);
}
}
为了获得&#34;反向效果&#34;,只需在每个奇数列中添加if条件。
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);
}
}
答案 1 :(得分: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>';
}
}
}
}
?>