PHP中的while循环问题

发布于 2024-10-06 11:34:22 字数 1132 浏览 0 评论 0原文

我的标记结构如下:

<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 条记录,所以如果它是最后一条记录,它应该关闭潜水。

请帮忙,谢谢!

I have my markup structure as below:

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

I have my data in a PHP result set, let's say I have 9 records so the structure should be as below:

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

So, the while loop should run in a way so that it will print the parent div after 4 records printed successfully. But in above I have 9 records so it should close the dive if its the last record.

Please help, Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

亢潮 2024-10-13 11:34:22

预配置...

<?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 } ?>

这就是您的问题,不是吗?

The preconfig...

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

In your web

<?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 } ?>

That's your problem isnt it?

樱桃奶球 2024-10-13 11:34:22

通过从给定的逻辑中获得一些想法这里我尝试遵循并且它有效。

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

那,解决了我的问题。

编辑:添加了 itotal 条件,因此当每页只有 4 条记录时,这也将正常工作。

By getting some idea from logic given here I tried following and it works.

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

That, solved my problem.

Edited: added itotal condition, so when you will have only 4 records per page then also this will work properly.

飘逸的'云 2024-10-13 11:34:22

好吧,现在我知道你在追求什么了。我之前在网格中显示项目时已经这样做过,并且由于那个浏览器,您需要打破每一行。

无论如何,它很丑陋,但我认为没有比这更容易的了

<?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 ?>

Right, now I know what you're after. I've done this before when showing items in a grid and you need to break each row because of that browser.

Anyway, it's ugly but I don't think it gets any easier than this

<?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 ?>
凉城已无爱 2024-10-13 11:34:22
<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>
<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>

or with an array:

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

or with a mysqli resultset:

<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>
鹿港巷口少年归 2024-10-13 11:34:22

为什么不使用模来“关闭”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 ?>

Why not use modulo to "close" a 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 ?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文