PHP 的循环运行超过应有的水平


PHP for loop running more than it should

我正在为我的网站制作一个ajax评论系统,我正在查询我的数据库以获取带有某个字段的任何评论。然后我查看返回结果的数量是否大于 3,或小于/等于 3(我有 3 的特定原因)。如果它大于 3,我设置一个变量 = 3,但如果它小于/等于 3,我将变量设置为等于返回的行数( mysql_num_rows() )。然后我在循环之前回显一些文本,然后我回显循环中的内容,然后在循环之后我回显更多的东西。由于某种原因,我的 for 循环运行的时间超过了给定的时间。非常奇怪的是,它在移动到下一条评论之前重复相同的评论 3 次并重复 3 次。在 for 循环之后,我总共有 9 条评论。这不适用于我的设计,因为我只能在放置它们的位置容纳 3 条评论。我的 for 循环嵌套了一段时间,因为我需要多次查询才能根据我发送给 php 的信息获取我需要的信息(这也是具体原因)。另一件事,PHP 仅在返回结果数大于 3 时才回显注释 9 次,如果小于 3 则工作正常。我已经看过这个代码 50 次,但我找不到任何东西。也许你们可以。这是我使用的代码:


                $comments = mysql_query("SELECT * FROM comments WHERE profid = '".$row['id']."'");
                $numComments = mysql_num_rows($comments);
                $totalCommComments = 0;
                if ($numComments > 0) {
                    if (mysql_num_rows($comments) > 3) {
                        $totalCommComments = 3;
                        echo '
        <div class="comments">
            <div class="commContainer">
                <ul class="'.$totalCommComments.'Comm">';
                        while ($get1 = mysql_fetch_array($comments)) {
                        for ($l = 1;$l<$totalCommComments;$l++) {
                            echo 'STUFF IS ECHOED HERE';
                        }
                        }  
                        echo '
                 </ul>
            </div>
       </div>';

我知道变量 $totalCommComments 设置为 3,因为我可以在<ul>中看到该类。

附言。这不是完整的代码,只有相关的代码。其他所有内容都在查询不同的数据库以获取进行此查询所需的其他信息。


非常感谢

$comments = mysql_query("SELECT * FROM comments WHERE profid = {$row['id']}");
$numComments = mysql_num_rows($comments);
if ($numComments > 0) { ?>
   <div class="comments">
       <div class="commContainer">
           <ul class="shortComments">
               <?php $i = 0;
               while ($i++ < 3 && $get1 = mysql_fetch_assoc($comments)) { ?>
                   <li class='comment'><?=$get1['comment']?></li>
               <?php } ?>
           </ul>
       </div>
   </div>
<?php } ?>

试试看。你有很多冗余代码

有很多不同的方法我可以继续编辑它,如果你让我们知道你想做什么,我可以更新这个代码

去掉 while 语句中的 for。

while ($get1 = mysql_fetch_array($comments)) {
                    for ($l = 1;$l<$totalCommComments;$l++) {
                        echo 'STUFF IS ECHOED HERE';
                    }
                    }

应该只是

while ($get1 = mysql_fetch_array($comments)) {
                        echo $get1['whatever'];
                    }  

这虽然会自动循环所有注释,但您要添加的是将返回的结果增加三倍的内容

$numComments是

注释数,$totalCommComments可能是 0 或 3。您有一段时间具有$numComments迭代,并且对于每个迭代,您都有一个 for 进行 0 或 3 次迭代。这意味着您将有 $numComments * $totalCommComments 次迭代,这是完全正常的。

在我看来,你应该有一个单一的循环,其中索引和循环条件应该得到纠正。