仅在3个值之间循环

时间:2016-09-17 05:51:55

标签: php loops

我正在尝试为每个div循环一个班级。

我知道如何获得第一个和最后一个,但无法弄清楚如何迭代1-3(或更多的其他想要扩展它的人)

我有什么:

$cats = get_categories();
// default value
$i = 0;

foreach ($cats as $cat) {
    // reset class
    $class = '';

    if(++$i % 3 == 0) { $class = 'third - '; }
    elseif(++$i % 2 == 0) { $class = 'second - '; }
    elseif(++$i % 1 == 0) { $class = 'first - '; }

    echo $class . $cat->name;
}

但是,当我回显$i以查看发生了什么时,它每次都会添加值,而不是通过if语句(我认为不会导致它增加数量)

我最终获得了这种输出:

third  - cat01
first  - cat02
second - cat03
third  - cat04
second - cat05
first  - cat06
third  - cat07

5 个答案:

答案 0 :(得分:2)

主要问题是$ i%2 == 0。它应该是$ i%3 == 1. 你必须总是提取模数3并检查0,1和2的结果

$cats = array('cat1', 'cat2', 'cat3', 'cat4', 'cat5', 'cat6', 'cat7');
$i = 0;
foreach ($cats as $cat) {
    if ($i % 3 == 0) { $class = ' first'; }
    elseif ($i % 3 == 1) { $class = ' second'; }
    elseif ($i % 3 == 2) { $class = ' third'; }
    $i++;
    echo "\n$class - $cat";
}

输出:

 first - cat1
 second - cat2
 third - cat3
 first - cat4
 second - cat5
 third - cat6

http://ideone.com/mljRcn

有4个课程也适用:

http://ideone.com/fLR2nl

答案 1 :(得分:0)

在这里查看php foreach循环文档 http://php.net/manual/en/control-structures.foreach.php

您可以像这样使用foreach循环:

foreach ($cats as $key => $cat) {}

$ key将是您的索引。

答案 2 :(得分:0)

您的代码$i会在每次检查条件时递增,请检查以下代码,

$cats = get_categories();
    // default value
    $i = 0;

    foreach ($cats as $cat) {
        // reset class
        $class = '';
        $i++;//increment outside
        if($i % 3 == 0) { $class = 'third - '; }
        elseif($i % 2 == 0) { $class = 'second - '; }
        elseif($i % 1 == 0) { $class = 'first - '; }

        echo $class . $cat->name;
    }

输出

first  - cat01
second - cat02
third - cat03
first  - cat04
second - cat05
third - cat06
first  - cat07

否则你使用下面的循环

foreach ($cats as $cat) { 
 $i++;
 if ($i % 3 == 0) { $class = ' third -'; } 
 elseif ($i % 3 == 1) { $class = ' first -'; } 
 elseif ($i % 3 == 2) { $class = ' second -'; } 
 echo $class . $cat->name;

   } 

mod的计算

multiple of 3 % 3 =0
((multiple of 3)-1) % 3 =2
((multiple of 3)-2) =1

例如

4%3=1
5%3=2
6%3=0

答案 3 :(得分:0)

$sequence = ['first', 'second', 'third'];

for($i = 0; $i < count($cats); $i++)
{
    $class = current($sequence) . $cats[$i]->name;

    if (next($sequence) === false)
    {
        reset($sequence);
    }
}

你也可以用foreach做同样的事。

foreach ( $cats as $cat )
{
    $class = current($sequence) . $cat->name;

    if (next($sequence) === false)
    {
        reset($sequence);
    }
}

答案 4 :(得分:0)

我相信只要每n rows分配一个班级并重复,你就可以在css中实现你想要的东西。

例如,下面的php只是在一个循环中生成一些简单的div元素而没有内联分配的类 - div的颜色(或者你想要应用的任何css规则)由下面的css规则使用{{ 1}}选择器机制 - 这里颜色/样式重复每3个元素,但你可以修改它以容纳不同的重复间隔 - 对于每4个子div的重复,它将是nth-child( 3n + x ),其中nth-child( 4n + x )是孩子等

x