зацикливание проблемы с массивом с разработкой, когда вводить HTML - PullRequest
0 голосов
/ 17 октября 2011

Я пытаюсь перебрать массив, и каждые 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 divs и затем еще одна строка.

Куда я иду не так?

Ответы [ 4 ]

3 голосов
/ 17 октября 2011

Проблема в вашем уравнении модуля.Остаток никогда не достигнет 3 и будет иметь вид (0,1,2,0,1,2,0,1,2).Таким образом, вы измените его равным 2.

        if ($i % 3 == 2)
0 голосов
/ 17 октября 2011

Просто так не может быть if ($i % 3 == 3) - $i % 3 всегда в диапазоне 0..2.Может быть, вы if ($i % 3 == 0) - это будет «каждый третий $ я»

0 голосов
/ 17 октября 2011

Я могу только предположить, что у вас есть

    , где вы не показали нам.Тем не менее, похоже, что вы пропустили свой окончательный , поэтому ваш браузер запутался.
    0 голосов
    / 17 октября 2011

    Если вы используете счетчик для отслеживания того, где вы находитесь в ряду, это может упростить задачу.

    $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>
    
    ...