在循环中获取最后n组数字

时间:2018-05-01 14:51:36

标签: php loops

我有一个循环,循环就像每行有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语句不是正确的方法,除了它只适用于少于14的$count个数字,如果我想要一个接一个地写所有数字无论$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 :(得分:4)

我不明白为什么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 ;
    }
}

答案 1 :(得分:2)

我正在研究range()的某些内容并且不得不对其进行切片:

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

然后我问,为什么我不能在range()

中这样做
$items = range($count - ($count - 1) % 4, $count);