我正在寻找一种方法来做一些稍微复杂的第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; ?>
答案 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 />";
}
在这种情况下输出第三和第六项。