考虑一种情况,你有一个随机行数的mysql表 FLAGS
ID Language Flag1 Flag2 Flag3 Flag4
1 dutch flanders_flag.png dutch_flag.png
2 french wallonia_flag.png french_flag.png morocco_flag.png
3 english england_flag.png ireland_flag.png america_flag.png scotland_flag.png
如果我想查询这些行并将它们放入我的html中,我使用while循环,因为我永远不知道这个表 FLAGS 有多少行。
<?php
$flagquery = $db->prepare ("SELECT * FROM flags");
$flagquery->execute();
while ($flagrow = $flagquery->fetch(PDO::FETCH_ASSOC)) {
?>
<div class="col-md-1 col-sm-2 col-xs-6">
<p><?php echo $flagrow['language']; ?></p>
<p><?php echo $flagrow['flag1']; ?></p>
<p><?php echo $flagrow['flag2']; ?></p>
<p><?php echo $flagrow['flag3']; ?></p>
<p><?php echo $flagrow['flag4']; ?></p>
</div>
<?php
}
?>
但正如您在 FLAGS 表中所看到的那样,您并不总是有4个标志语言,因此我认为您必须在此前一个while循环中执行while循环才能回显 FLAGS 表中存在的标志,而不是仅仅回显所有标志,即使它们是空的。
我的想法是对的吗?或者什么是处理我的情况的最佳方式?
答案 0 :(得分:1)
不,你不需要第二个循环,你可以使用!empty()。如果变量是空字符串,false,array(),NULL,“0?,0和未设置的变量”,它将返回false。它将在您的情况下有用,如果您允许FLAGS具有NULL值。
<?php
$flagquery = $db->prepare ("SELECT * FROM flags");
$flagquery->execute();
while ($flagrow = $flagquery->fetch(PDO::FETCH_ASSOC)) {
?>
<div class="col-md-1 col-sm-2 col-xs-6">
<p><?php echo $flagrow['language']; ?></p>
<?php if(!empty($flagrow['flag1'])) echo '<p>'.$flagrow['flag1'].'</p>'; ?>
<?php if(!empty($flagrow['flag2'])) echo '<p>'.$flagrow['flag2'].'</p>'; ?>
<?php if(!empty($flagrow['flag3'])) echo '<p>'.$flagrow['flag3'].'</p>'; ?>
<?php if(!empty($flagrow['flag4'])) echo '<p>'.$flagrow['flag4'].'</p>'; ?>
</div>
<?php
}
?>
答案 1 :(得分:0)
<?php
$flagquery = $db->prepare ("SELECT * FROM flags");
$flagquery->execute();
while ($flagrow = $flagquery->fetch(PDO::FETCH_ASSOC)) {
?>
<div class="col-md-1 col-sm-2 col-xs-6">
<p><?php echo $flagrow['language']; ?></p>
<p><?php if($flagrow['flag1']!='') echo $flagrow['flag1']; ?></p>
<p><?php if($flagrow['flag2']!='') echo $flagrow['flag2']; ?></p>
<p><?php if($flagrow['flag3']!='') echo $flagrow['flag3']; ?></p>
<p><?php if($flagrow['flag4']!='') echo $flagrow['flag4']; ?></p>
</div>
<?php
}
?>
检查变量是否为空,如果不是
则进入