如何在while循环下一次回显该行

时间:2011-05-30 22:14:55

标签: php

我有这样的代码

<?php

$getLeftSide = 'select * from leftmenu';

$result = $db -> query ($getLeftSide) or die ("$db->error");

if ($result) {

    while ($row = $result -> fetch_object()) {

        $getCat = $row -> left_item_cat;



        if ($getCat == 1) {
    echo "<div class='left_main_cat'>Web and Desigen</div>";
    echo "<a href='index.php?learn_id= $row->left_item_link'><div class='left_label_sub'>$row->left_item_name</div></a>";

        }
      }
    }



?>

我需要一次回复这一行

echo "<div class='left_main_cat'>Web and Design</div>";

当然它是在while循环下所以它自己打印多次 有没有解决这个问题的原因,只打印一次这条线。

4 个答案:

答案 0 :(得分:1)

丑陋,但我还不擅长PHP!

$has_printed = FALSE;
while ($row = $result -> fetch_object()) {

    $getCat = $row -> left_item_cat;

    if ($getCat == 1) {
if(!$has_printed){
echo "<div class='left_main_cat'>Web and Desigen</div>";
$has_printed = TRUE;
}
echo "<a href='index.php?learn_id= $row->left_item_link'><div class='left_label_sub'>$row->left_item_name</div></a>";

    }
  }

答案 1 :(得分:1)

正如Ben所说,最简单和最清晰的解决方案是使用布尔检查变量:

$catFound = FALSE;
while ($row = $result -> fetch_object()) {

    $getCat = $row -> left_item_cat;

    if ($getCat == 1) {
        // We only want this category printed for the first category,
        // if it exists.
        if(!$catFound) { 
            echo "<div class='left_main_cat'>Web and Desigen</div>";
            $catFound = TRUE;
        }
        echo "<a href='index.php?learn_id= $row->left_item_link'><div class='left_label_sub'>$row->left_item_name</div></a>";
    }
}

虽然使用布尔变量和注释来表达你的意图似乎更好。

答案 2 :(得分:0)

简单解决方案:添加另一个默认值为false的布尔变量然后只检查是否为false,打印文本并将其设置为true。

答案 3 :(得分:0)

在循环中添加布尔或检查变量或任何类型的条件是一个非常糟糕的主意,我永远不会这样做。每次摆动循环时,都必须检查条件。这就像一个写得很糟糕的开关/箱子。

找出一种在循环之前完成它的方法。

  1. 展开循环,大多数人都这样做是为了节省空间,但大多数编译器都会将它们展开以进行优化

  2. 在循环之前坚持

  3. 找到一种java或css方式来隐藏它,直到循环完成或你想显示内容。