PHP-логика для создания расположения сидений в автобусе

#php

#php

Вопрос:

Я пытаюсь сгенерировать расположение мест в автобусе, используя PHP. То, чего я хочу достичь, показано на изображении ниже введите описание изображения здесь

То, что у меня есть на данный момент, приведено ниже введите описание изображения здесь

У меня есть следующий скрипт

 $divide = 4;
$inside = 2;
for($i = 1; $i <= 45; $i  ){
    if($i % $divide == 1){
        echo "<tr>";
    }
    echo "<td width='15%' align='center'>".$i."</td>";
    if($i % $inside == 0 amp;amp; $i % $divide != 0){
        echo "<td width='40%'>amp;nbsp;</td>";
    }
    if($i % $divide == 0){
        echo "</tr>";
    }
}
  

Как вы можете видеть, у меня номер места из 1-42 отображается правильно, но я застрял в последнем ряду. В последней строке не должно быть пробелов. Кто-нибудь, пожалуйста, может помочь мне исправить мою логику?

Комментарии:

1. У вас места с 1 по 41 отображаются правильно. На вашей картинке нет 42. Это может быть подсказкой.

2. @DinoCoderSaurus виноват. Изображение обновлено.

3. Я переписал, и этот код работает. Может быть, кэширование? Может быть, какой-то недопустимый HTML в другом месте страницы?

4. @DinoCoderSaurus логика не будет работать для последней строки. Необходимо внести некоторые изменения.

5. правильно ли расположены схемы тегов вашей таблицы <tr> ? (браузеры часто могут исправлять неправильные форматы схем таблиц)

Ответ №1:

Вы можете достичь этого двумя способами :

Способ 1:

Путь холла не просматривается, когда мы находимся на уровне index = 42

Новая строка создается только в том случае, если :

$i % $divide == 1 amp;amp; $i != 45 имеет значение true и закрывается, если $i % $divide == 0 amp;amp; $i != 44 имеет значение true

 <?php
$divide = 4;
$inside = 2;
echo "<table border='1'>";

for($i = 1; $i <= 45; $i  ){
    if($i % $divide == 1 amp;amp; $i != 45){
        echo "<tr>";
    }
    echo "<td width='15%' align='center'>".$i."</td>";
    if($i % $inside == 0 amp;amp; $i % $divide != 0 amp;amp; $i != 42){
        echo "<td width='40%'>amp;nbsp;</td>";
    }

    if($i % $divide == 0 amp;amp; $i != 44){
        echo "</tr>";
    }
}

echo "</table>";
  

Способ 2:

Этот способ более прост:

Строки с и пустой путь зала генерируются в первом цикле for, в то время как последняя строка генерируется в другом цикле, начиная с позиции 41

 <?php
$divide = 4;
$inside = 2;
echo "<table border='1'>";

for($i = 1; $i <= 40; $i  ){
    if($i % $divide == 1){
        echo "<tr>";
    }
    echo "<td width='15%' align='center'>".$i."</td>";
    if($i % $inside == 0 amp;amp; $i % $divide != 0){
        echo "<td width='40%'>amp;nbsp;</td>";
    }
    if($i % $divide == 0){
        echo "</tr>";
    }
}
echo "<tr>";
for ($i = 41; $i <= 45; $i  ) {
    echo "<td width='15%' align='center'>".$i."</td>";
}
echo "</tr>";
echo "</table>";
  

Комментарии:

1. Пожалуйста, добавьте некоторые пояснения относительно того, что вы на самом деле изменили и почему это сработало? ответы только в коде не очень полезны для кого-либо еще с подобными проблемами.

2. Я добавил некоторые пояснения по запросу

Ответ №2:

Основываясь на комментариях, я подозреваю, что изображение ошибочно, и вопрос в том, как «показать» пустые места (и проход) в последнем ряду.

Предлагаю вам добавить еще одну переменную $maxseats = 45 ; запустите цикл «четные 4» раза (т.Е. от 1 до 48), и если $i > $maxseats выведите (echo) заполнитель.