问题描述
|
我有这样的代码
<?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循环下,所以它会多次自我打印
有一个为什么要解决这个问题并只打印此行一次的原因。
解决方法
正如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>\";
}
}
尽管似乎最好使用布尔变量和注释来阐明您的意图。
, 丑陋,但我还不擅长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>\";
}
}
, 简单的解决方案:添加另一个布尔值默认值为false的布尔变量,然后检查是否为false,打印文本并将其设置为true。
, 在循环中添加布尔值或检查变量或任何类型的条件是一个非常糟糕的主意,我从来没有这样做。每次您在循环中摆动时,都必须检查条件。就像是一个写得不好的开关/盒。
在循环之前找出解决方法。
展开循环,大多数人这样做是为了节省空间,但是大多数编译器仍会展开循环以进行优化
将其粘贴在循环之前
找到一种Java或CSS方式将其隐藏,直到循环完成或您要显示内容为止。