Определить остаток, когда элементы отображаются в сетке - PHP
У меня есть цикл, который показывает элементы в сетке до 12 элементов одновременно (3 на 4 строки вниз). В сетке может быть любое количество элементов (от 1 до 12), но в тех случаях, когда у меня есть только 1 или 2 элемента в строке, мне нужно добавить класс в HTML. Например:
Когда у меня 3,6,9,12 предметов - ничего не требуется. Когда у меня 4,7,10 предметов (1 остаток) - для предметов 4, 7 и 10 требуется применение класса. Когда у меня 5,8,11 предметов (2 остатка)) - Пункты 4,5, 7,8, 10,11 требуют применения класса
Как я могу сделать это в PHP. У меня есть для меня следующее:
- Общее количество товаров на странице
- Текущий пункт
Извинения - псевдокод, как редактор искажает его:
$howmanyleft = totalproducts - currentproduct
if ($howmanyleft <= 2) {
if ($currentproduct % 3 == 0) {
//addclass
}
}
Тогда в моем CSS
article.product-single {
width: 33.3333%;
border-bottom: 1px solid rgb(195,195,195);
border-right: 1px solid rgb(195,195,195);
}
article.product-single:nth-child(3n) {
border-right: none;
}
article.lastrow, article.product-single:last-child {
border-bottom:none;
}
Извините, я понял это неправильно. Это не то, что мне нужно. Мои извенения. Мне просто нужны все оставшиеся элементы, помеченные классом, а не каждой строкой.
Если есть 4 предмета, предмет 4 помечается, если есть 5 предметов, предметы 4 и 5 помечается, если есть 10 предметов, предмет 10 помечается, если есть 11 предметов, предметы 10 и 11 помечаются.
2 ответа
Если я правильно понял ваш вопрос, вам понадобится код наподобие следующего:
// check how many items will remain in the final row (if the row is not filled with 3 items)
$remainder = $total_items % 3;
for ($i = 0; $i < $total_items; $i++) {
if($remainder > 0 && $i >= $total_items - $remainder) {
// executed for items in the last row, if the number of items in that row is less than 3 (not a complete row)
} else {
// executed for items that are in 3 column rows only
}
}
Вот полный пример того, как что-то подобное будет работать. Создайте новый php-файл со следующим кодом и посмотрите результат.
// add some random data to an array
$data = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven');
$total_items = count($data);
// check how many items will remain in the final row (if the row is not filled with 3 items)
$remainder = $total_items % 3;
// loop through all the items
for ($current_item = 0; $current_item < $total_items; $current_item++) {
// check to see if the item is one of the items that are in the row that doesn't have 3 items
if($remainder > 0 && $current_item >= $total_items - $remainder) {
echo $data[$current_item] . " - item in last row, when row is not complete<br />";
// code for regular items - the ones that are in the
} else {
echo $data[$current_item] . " - item in filled row<br />";
}
}
Это просто number_of_products по модулю number_of_columns
4 % 3 == 1
5 % 3 == 2
6 % 3 == 0