0

我正在尝试遍历一个数组,每 3 个循环创建一个新行,但是我很难让它工作,目前我的代码看起来像这样,

<li class="row">
        <?php for ($i = 0; $i < count($results); $i++) : ?>
                <div class="grid_8">
                    <div class="candidate <?php if ($i % 3 == 2) echo "end"; ?>">
                        <div class="model_image shadow_50"></div>
                        <dl>
                            <dt><?php echo $results[$i]['first_name']; ?> <?php echo $results[$i]['surname']; ?></dt>
                            <dd>
                                <?php echo $results[$i]['talent']; ?>
                                <ul>
                                    <li><?php echo anchor("/candidates/card/" . strtolower($results[$i]['first_name']) . "-" . strtolower($results[$i]['surname']), "View Details", array('class' => 'details')); ?></li>
                                    <li><?php echo anchor("/candidates/card/" . strtolower($results[$i]['first_name']) . "-" . strtolower($results[$i]['surname']), "View Showreel", array('class' => 'showreel')); ?></li>
                                    <li><?php echo anchor("/candidates/card/" . strtolower($results[$i]['first_name']) . "-" . strtolower($results[$i]['surname']), "Shortlist", array('class' => 'shortlist')); ?></li>
                                </ul>
                            </dd>
                        </dl>
                    </div>
                </div>
            <?php if ($i % 3 == 3) : ?>
                 </li><li class="row">   
            <?php endif; ?>
        <?php endfor; ?>

但是,这只会创建一行,其中包含我的所有结果,而它应该是 1 li,其中包含一类行,然后是 3 个 .grid_8 div,然后是另一行。

我哪里错了?

4

4 回答 4

3

问题是你的模数方程。余数永远不会达到 3,并且将是 (0,1,2,0,1,2,0,1,2) 的模式。因此,您将其更改为等于 2。

        if ($i % 3 == 2)
于 2011-10-17T11:32:48.370 回答
0

如果您使用计数器来跟踪您在循环中的逐行位置,它可能会使事情变得更容易。

$count = 0;
for ($i = 0; $i < count($results); $i++) {
    if ($count == 0) {
        echo "<li class=\"row\">";
    }

    echo "all your middle stuff";
    $count++;

    if ($count == 4) {
        echo "</li>";
        $count = 0;
    }
}

//just make sure we dont need to add a /li
if ($count % 3 != 0) 
    echo "</li>
于 2011-10-17T11:33:17.730 回答
0

我只能假设你有一个封闭的

    你没有向我们展示的地方。尽管如此,您似乎错过了最终结果,因此您的浏览器感到困惑。

    于 2011-10-17T11:33:23.850 回答
    0

    它不能像这样if ($i % 3 == 3)-$i % 3总是在范围内0..2。也许你if ($i % 3 == 0)- 这将是“每三分之一 $i”

    于 2011-10-17T11:34:08.537 回答