PHP nth foreach记录

时间:2013-04-15 13:39:34

标签: php

我正在寻找一种方法来做一些稍微复杂的第n条记录判断,类似于PHP中的jQuery / CSS3 nth-child(3n-1),所以每行有三个cols,而mid中需要有一个类“mid”添加。我最好不要使用jQuery,因为页面加载和正在添加的类似乎总是存在延迟。

如下所示,但我知道这意味着$zxc % 2,但我们都从某个地方开始。

<?php $zxc = 1; ?>
<?php foreach($products as $product): ?>
<div class="theProductListItem<?php if($zxc % (3-1) == 0){?> mid<?php } ?>">
<!--product contents-->
</div>
<?php $zxc++; ?>
<?php endforeach; ?>

3 个答案:

答案 0 :(得分:3)

使用此:

if( ($zxc % 3) == 1)

答案 1 :(得分:0)

您需要使用% 3作为定义,您需要“每第3个项目”。

然后你有一些选择,你可以在偏移处开始你的变量。 例如

$x = 2;
foreach ($array as $item) {
    ...
    if ($x % 3 == 0) {
        ...
    }
    ...
}

您也可以从更常见的0或1开始并更改比较。

$x = 0;
foreach ($array as $item) {
    ...
    if ($x % 3 == 1) {
        ...
    }
    ...
}

从表面上看,您可以将最后一个示例更改为此。

$x = 0;
foreach ($array as $item) {
    ...
    if (($x % 3) - 1 == 0) {
        ...
    }
    ...
}

答案 2 :(得分:0)

这是完成你想要的东西的一种方式,而不必担心模数计算,虽然被授予,但它有点冗长。它使用一些方法扩展标准ArrayIterator以跳过记录:

class NthArrayItemIterator extends ArrayIterator
{
    private $step;
    private $offset;

    public function __construct($array, $step = 1, $offset = 0)
    {
        parent::__construct($array);
        $this->step = $step;
        $this->offset = $offset;
    }

    private function skipn($n)
    {
        echo "skipn($n)\n";
        while ($n-- && $this->valid()) {
            parent::next();
        }
    }

    public function rewind()
    {
        parent::rewind();
        $this->skipn($this->offset);
    }

    public function next()
    {
        $this->skipn($this->step);
    }
}

foreach (new NthArrayItemIterator(array(1, 2, 3, 4, 5, 6), 3, 2) as $item) {
    echo "$item<br />";
}

Demo

在这种情况下输出第三和第六项。