【问题标题】:While loop inside a while loop from PDO query来自 PDO 查询的 while 循环内的 While 循环
【发布时间】:2015-05-29 11:24:12
【问题描述】:

假设您有一个 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 表中存在的标志,而不是仅仅回显所有标志,即使它们是空的。

我的想法对吗?或者什么是处理我的情况的最佳方法?

【问题讨论】:

  • 使用 isset($flagrow['flag1'])
  • 我有这个想法,谢谢你的同样想法。但是是否有更短的方法可以查看数组键是否已设置?
  • isset() 是一种捷径.. 我不知道是否有更短的方法:)
  • 还有 !empty() 更好......如果变量是空字符串,它会返回 true,false,array(),NULL,“0?,0,和未设置的变量。
  • 刚刚对其进行了测试,它不适用于 isset(),只能使用 !empty 或与空字符串进行比较!如果你查询一个列,即使它是空的,它也总是会被设置。

标签: php while-loop


【解决方案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
}
?>

【讨论】:

    【解决方案2】:
    <?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
    }
    ?>
    

    检查变量是否为空,否则它进入

    【讨论】:

    • 我只会检查变量是否为空,否则它会进入
    • 在你的回答中发布而不是给我,这样更多的用户会知道你做了什么以及为什么 OP 应该这样做
    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2016-04-24
    • 2013-01-15
    • 1970-01-01
    • 2016-03-14
    • 2011-06-19
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多