-2

我正在寻找一种方法来进行稍微复杂的第 n 条记录调整,类似于nth-child(3n-1)PHP 中的 jQuery/CSS3,因此每行有三个列,中间需要添加“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; ?>
4

3 回答 3

3

用这个:

if( ($zxc % 3) == 1)
于 2013-04-15T13:42:21.947 回答
0

% 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) {
        ...
    }
    ...
}
于 2013-04-15T13:47:27.020 回答
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 />";
}

演示

在这种情况下,它输出第三个和第六个项目。

于 2013-04-15T14:05:01.317 回答