Получить последние n групп чисел в цикле - PullRequest
0 голосов
/ 01 мая 2018

У меня есть цикл, как будто в каждой строке 4 элемента, я хочу добавить класс к элементам последней строки, поэтому мне нужно что-то вроде этого:

switch( $count ){
    case 8:
        $items = [5, 6, 7, 8];
        break;

    case 7:
        $items = [5, 6, 7];
        break;

    case 6:
        $items = [5, 6];
        break;

    case 5:
        $items = [5];
        break;

    case 9:
        $items = [9];
        break;

    case 10:
        $items = [9, 10];
        break;

    case 11:
        $items = [9, 10, 11];
        break;

    case 12:
        $items = [9, 10, 11, 12];
        break;

    case 13:
        $items = [13];
        break;

    // And so on...

    default:
        if( $count <= 4 ){
            $items = range(1, $count);
        }
        break;
}

Я думаю, использование оператора switch не является правильным способом сделать это, кроме того, оно работает только для $count чисел, меньших 14, и если бы мне пришлось писать все числа одно за другим, если я хочу, чтобы это работало независимо от значения $count.

Чтобы прояснить немного больше:

У нас есть набор элементов (html-элементов), которых по 4 в каждой строке, и мы хотим добавить класс css к каждому элементу в последней строке, поэтому, если общее количество элементов равно 8, 5-й, 6-й, 7-й и 8-й элементы находятся в последнем ряду.

См. Эти примеры

1   2   3   4
5   6   7   8  This is the last row, so $items equals [5, 6, 7, 8]

OR 

1   2   3   4
5   6          This is also the last row so $items equals [5, 6]

OR

1   2   3   4
5   6   7   8
9   10  11      This is last row too  so $items equals [9, 10, 11]

OR

1   2   3   4   We have only 4 items , so there is only one row so $items equals [1, 2, 3, 4]

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Я работал над чем-то с range() и мне пришлось нарезать его:

$items = array_slice(range($count - 3, $count), -($count % 4));

Тогда я спросил, почему я не могу сделать это в range():

$items = range($count - ($count - 1) % 4, $count);
0 голосов
/ 01 мая 2018

Я не понимаю, почему 1, 2, 3, 4 отделены от остальных, но так как это то, что вы, кажется, хотите, это ваше решение:

if( $count <= 4 ){
    $items = [1, 2, 3, 4];
} else {
    $items = [] ;
    for ( $i = $count - ($count-1) % 4 ; $i <= $count  ; $i++) {
        $items[] = $i ;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...