Пока проблема цикла в PHP - PullRequest
       1

Пока проблема цикла в PHP

1 голос
/ 09 декабря 2010

У меня есть структура разметки, как показано ниже:

<div>
    <div>value1</div>
    <div>value2</div>
    <div>value3</div>
    <div>value4</div>

    <div class="clear"></div>
</div>
<div>
    <div>value5</div>
    <div>value6</div>
    <div>value7</div>
    <div>value8</div>

    <div class="clear"></div>
</div>

У меня есть данные в наборе результатов PHP, скажем, у меня 9 записей, поэтому структура должна быть такой:

<div>
    <div>value1</div>
    <div>value2</div>
    <div>value3</div>
    <div>value4</div>

    <div class="clear"></div>
</div>
<div>
    <div>value5</div>
    <div>value6</div>
    <div>value7</div>
    <div>value8</div>

    <div class="clear"></div>
</div>
<div>
    <div>value9</div>

    <div class="clear"></div>
</div>

Итак, цикл while должен выполняться так, чтобы он печатал родительский div после успешной печати 4 записей. Но выше у меня есть 9 записей, поэтому он должен закрыть погружение, если это последняя запись.

Пожалуйста, помогите, спасибо!

Ответы [ 5 ]

5 голосов
/ 09 декабря 2010

Предварительная настройка ...

<?php
    $num_of_results = sizeof($your_array);  
    $loops = ceil($num_of_results/4);
    $k = 0;
?>

В вашем вебе

<?php for($p = 0; $p < $loops; $p++) { ?>
    <div>
        <div>
        <?php for($i = 0; $i < 4 && $k < $num_of_results; $i++) { ?>
            <div><?php echo $your_array[$k]; $k++;?></div>
        <?php } ?>
        <div class="clear"></div>
        </div>
    </div>
    <?php } ?>

Это твоя проблема, не так ли?

1 голос
/ 09 декабря 2010

Получив некоторую идею из логики, данной здесь Я попытался следовать, и это работает.

<div> <!-- started main div -->

<?php 
    $icount = 1;
    $itotal = mysql_num_rows($result_rs);
    while ($rs = mysql_fetch_array($result_rs)) {
        echo '<div>'.$rs['value'].'</div>'; 

        if ($icount % 4 == 0 && $icount != $itotal){
            echo '<div class="clear"></div>';
            echo '</div>'; //closed main div

            echo '<div>'; //started new main div
        }

        $icount++;
    }
?>

</div> <!-- closed main div -->

Это, решило мою проблему.

Отредактировано: добавлено условие итота, поэтому, когда у вас будет только 4 записи на страницу, это также будет работать правильно.

0 голосов
/ 09 декабря 2010

Почему бы не использовать модуль для "закрытия" div?

<div>
<?php foreach($data as $key => $value) : ?>
    <div><?php echo $value ?></div>
<?php if($key % 4 == 0 && $key != 0) : // add a clearing div, close the first group and open another one ?>
    <div class="clear"></div>
</div>
<div>
<? endforeach ?>
<?php if($key % 4 != 0) : // div has not been closed as the number of records % 4 was not equal 0 ?>
    <div class="clear"></div>
 </div>
<? endif ?>
0 голосов
/ 09 декабря 2010
<div>
    <?php for ($i = 1; $i <= 9; $i++): ?>
    <?php if ($i%4 == 1 && $i != 1): ?>
    <div class="clear"></div>
</div>
<div>
    <?php endif; //$i%4 == 1 && $i != 1 ?>
    <div>Value <?php echo $i ?></div>
    <?php endfor; //$i = 1; $i <= 9; $i++ ?>
    <div class="clear"></div>
</div>

или с массивом:

<div>
    <?php foreach ($arr as $k=>$v): ?>
    <?php if (($k+1)%4 == 1 && $k != 0): ?>
    <div class="clear"></div>
</div>
<div>
    <?php endif; //($k+1)%4 == 1 && $k != 0 ?>
    <div><?php echo $v ?></div>
    <?php endforeach; //$arr as $k=>$v ?>
    <div class="clear"></div>
</div>

или с набором результатов mysqli:

<div>
    <?php $count = 1 ?>
    <?php while ($row = mysqli_fetch_array($result)): ?>
    <?php if ($count%4 == 1 && $count != 1): ?>
    <div class="clear"></div>
</div>
<div>
    <?php endif; //$count%4 == 1 && $count != 1 ?>
    <div><?php echo $row['value'] ?></div>
    <?php $count++ ?>
    <?php endwhile; ?>
    <div class="clear"></div>
</div>
0 голосов
/ 09 декабря 2010

Хорошо, теперь я знаю, что вы после.Я делал это раньше, когда показывал элементы в сетке, и вам нужно разбить каждую строку из-за этого браузера.

В любом случае, это ужасно, но я не думаю, что это становится легчечем это

<?php for ($i = 0, $total = count($resultSet); $i < $total; $i += 4) : ?>
<div>
    <?php
    for ($j = $i; $j < ($i + 4); $j++) :
    if (!isset($resultSet[$j])) :
    ?>
    <div class="clear"></div>
    </div>
    <?php break 2; endif ?>
    <div><?php echo htmlspecialchars($resultSet[$j]) ?></div>
    <?php endfor ?>
    <div class="clear"></div>
</div>
<?php endfor ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...