Определить остаток, когда элементы отображаются в сетке - 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
Другие вопросы по тегам