-2

管理者が管理者パネルを使用して座席を予約できるキャンペーン プロジェクトを行っています。彼がそれを編集したいときは、以前に選択した座席が強調表示されるはずです。これは私がこれを達成するためにやったことです

if ($mode == 'EDIT')
        {
            $k=1;
            for($i=1;$i<=10;$i++)
            {
            for($j=1;$j<=10;$j++)
            { ?>
                <div id='<?php echo $k ;?>' class="seat_selection"
                <?php foreach($seat_data as $seats)
                {
                if($seats->iSeatNumber == $k)
                {?>
                    style='min-height:25px;min-width:25px;background-color:#12B22F;float:left;margin:0 0 5px 10px;cursor:pointer;'
                <?php
                }
                else
                {?>
                    style='min-height:25px;min-width:25px;background-color:#969696;float:left;margin:0 0 5px 10px;cursor:pointer;'
                <?php
                }
                }
                ?>
                >
                <?php echo $k;?>
                </div>
            <?php $k++;
            } ?>
            <br /><br />
            <?php
            }
        }

ただし、選択された座席のうちの最初の座席のみが強調表示されています (スクリーンショットに示されている5 番目の座席のように)。休みは変わらず。

スクリーンショット 座席指定

問題はのループにあると思いますforeach。私は間違った方法でそれをやっていますか?それとも他の方法はありますか?どんな助けでも大歓迎です。

(phpフレームワーク)datamapperに(db操作)を使用しています。codeigniter

4

3 に答える 3

4

私があなたの仕事を理解していれば、これはそれを達成するための本当に悪い方法だと思います.

最初に強調表示されたすべての座席で配列を作成してみてください。

$highlighted = array();
foreach($seat_data as $seat) {
    $highlighted[] = $seat->iSeatNumber;
}

$k = 1;
for($i=1;$i<=10;$i++)
{
    for($j=1;$j<=10;$j++)
    {
        if(in_array($k, $highlighted))
        {
             echo '<div id="'.$k.'" class="seat_selection" style="min-height:25px;min-width:25px;background-color:#12B22F;float:left;margin:0 0 5px 10px;cursor:pointer;">'.$k.'</div>';
        } else {
             echo '<div id="'.$k.'" class="seat_selection" style="min-height:25px;min-width:25px;background-color:#969696;float:left;margin:0 0 5px 10px;cursor:pointer;">'.$k.'</div>';
        }
        $k++;
    }
    echo "<br/><br/>";
}

それはずっときれいです。私はこれをテストしていませんが、動作するはずです。

于 2012-08-22T06:32:22.770 に答える
2

これは Vlakarados の例に似ていますが、1 つのループしか使用していません。強調表示された座席 ID の配列を作成し、$iループ時に がこの配列内にあるかどうかを確認し、そうであれば、強調表示されたクラスを追加するという考え方です。

すべてのインライン CSS を使用する代わりに、以下の例のように、強調表示/非強調表示用のクラスを作成できます。

$highlightedSeats = array(2, 6, 12, 21, 44);
for($i=1; $i<=100; $i++) { 
    $class = (in_array($i, $highlightedSeats)) ? 'highlighted' : 'not-highlighted';
    echo '<div id="' . $i . '" class="seat_selection ' . $class . '">' . $i . '</div>';
    if($i % 10 == 0) {
        echo '<br /><br />';
    } 
} 
于 2012-08-22T06:49:07.473 に答える
0

次のように変更してみてください:

if ($mode == 'EDIT'){
$k=1;
for($i=1;$i<=10;$i++){
for($j=1;$j<=10;$j++){ ?>
<?php foreach($seat_data as $seats){
if($seats->iSeatNumber == $k){
$style="min-height:25px;min-width:25px;background-color:#12B22F;float:left;margin:0 0 5px 10px;cursor:pointer;";
}
else{
$style='min-height:25px;min-width:25px;background-color:#969696;float:left;margin:0 0 5px 10px;cursor:pointer;';
} 
}
?>
<div id='<?php echo $k ;?>' class="seat_selection" style="<?php echo $style; ?>">
<?php echo $k;?>
</div>
<?php $k++;
} ?>
<br /><br />
<?php
}
}
于 2012-08-22T06:50:30.767 に答える