php foreach перерыв таблицы

Я использую таблицы для хранения содержимого, которое динамически загружается. Это для формы бронирования, которая будет отзывчивой. Что я хочу сделать, так это разбить каждую строку таблицы на две, если есть более 5 столбцов, чтобы мобильная версия помещалась на экране.

Я уверен, что это может быть достигнуто путем расширения того, что у меня уже есть, но я не могу заставить его работать.

Вот мой текущий код:

<table>
<tr>
<?php foreach ($hostel->getAvailableDates() as $date): ?>
<th><?php echo $date->getDayOfTheWeek(); ?></th>
<?php endforeach ?>
</tr>
<tr>
<?php foreach ($hostel->getAvailableDates() as $date): ?>
<td>
<?php if($date->getAvailable()) { ?>
<b class="avail tick">Available</b>
<?php } else { ?>
<b class="avail cross">Unavailable</b>
<?php }?>
</td>
<?php endforeach ?>
</tr>
</table>

Мне нужно разорвать цикл для каждой строки tr через 5 петель добавьте новую строку внизу.
Я экспериментировал с

$max_loop = 5;
$count = 0;

Но пока не повезло.

0

Решение

Я предпочитаю реорганизовать данные:

<?php
$availDates = array();
foreach ($hostel->getAvailableDates() as $date) {
$availDates[] = $date;
}
$maxCols = 5;
$chunked = array_chunk( $availDates, $maxCols );
?>
<table>
<?php
foreach ($chunked as $chunk) {
?><tr>
<?php foreach ($chunk as $date): ?>
<th><?php echo $date->getDayOfTheWeek(); ?></th>
<?php endforeach; ?>
</tr>
<tr>
<?php foreach ($chunk as $date): ?>
<td>
<?php if($date->getAvailable()) { ?>
<b class="avail tick">Available</b>
<?php } else { ?>
<b class="avail cross">Unavailable</b>
<?php }?>
</td>
<?php endforeach; ?>
</tr><?php

}
?>
</table>
0

Другие решения

Посмотрите на мод оператора. Это должно дать вам то, что вам нужно.

если ($ count% $ max_loop == 0)

0

Я надеюсь, что это может помочь вам. Благодарю.

    <?php

$avDates = $hostel->getAvailableDates();
echo "<table><tr>";
foreach($avDates as $i=>$date){  {
if ($i == $max_loop) {
echo "</tr><tr>";
}
echo "<td>".($date->getAvailable() ? '<b class="avail tick">Available</b>' : '<b class="avail cross">Unavailable</b>')."</td>";
}
echo "</tr></table>";
?>
0

Если значение, возвращаемое getAvailableDates, является массивом, вы можете использовать цикл for вместо foreach и проверить, является ли текущий индекс кратным пяти, поэтому вам не нужно отслеживать переменную count

$avDates = $hostel->getAvailableDates();
for ($i = 0; $i < count($avDates); $i++)  {
$date = $avDates[$i];
//do your staff
//if multiple of five add another tr
if ($i % 5 == 0) {

}
}
0
По вопросам рекламы [email protected]