如何在 php 中的单引号字符串内执行 while 循环

How to execute while loop inside single quote string in php

我是一名 PHP 初学者,正在为学习目的开发一个简单的项目,此时我正在尝试在另一个 while 循环中执行一个 while 循环。但是第二个循环在单引号字符串中。两个循环的输出都存储在正常的 html/bootstrap table 单元格中。起初我能够获得第一个循环的输出,但是当我在字符串中添加第二个循环时出现了问题。我已经研究过在 PHP 中使用引号,但我仍然无法弄清楚问题所在。下面是代码。 请有人帮忙。

  $output .='<div class="table-responsive">
  <table class="table table-bordered"><form>';
  

  while($row = $result->fetch_assoc()){
      $output .='


     <tr>
     <td width="30%"><label>Price</label></td>
     <td>
     <div class="form-group">
     <input type="text" class="form-control"  placeholder="'.$row['price'].'">
   </div>
   </td>
    </tr>

   <tr>
   <td width="30%"><label>Writer</label></td>
   <td>
   <div class="form-group">
   
     <select class="form-control" id="">
     
       '.while($col = $res->fetch_assoc()){.' 
     <option value="" disabled selected>'.$row['name'].'</option>
     <option value="" >'. $col['username'].'</option>
       '.} .'
     </select>
   
 </div>
 </td>
  </tr>
  

   ';
  }
  $output .="</table></div></form>";
  echo $output;
}

我得到的错误是: 解析错误:语法错误,意外 'while' (T_WHILE) in C:\xampp\htdocs\Writers_SM\select.php on line 61(second while loop )

您不能像此处那样连接循环。您可以做的是将字符串的初始部分存储到一个变量中,然后第二次循环并使用 .= 将字符串附加到原始字符串,然后完成字符串的其余部分。类似的东西:

$output .='<div class="table-responsive">
  <table class="table table-bordered"><form>';
  

  while($row = $result->fetch_assoc()){
      $output .='
     <tr>
     <td width="30%"><label>Price</label></td>
     <td>
     <div class="form-group">
     <input type="text" class="form-control"  placeholder="'.$row['price'].'">
   </div>
   </td>
    </tr>

   <tr>
   <td width="30%"><label>Writer</label></td>
   <td>
   <div class="form-group">
   
     <select class="form-control" id="">';


     while($col = $res->fetch_assoc()) {
          $output .= '   <option value="" disabled selected>'.$row['name'].'</option>
     <option value="" >'. $col['username'].'</option>'
      }

    $output .= '</select>
   
 </div>
 </td>
  </tr>
  

   ';
  }
  $output .="</table></div></form>";
  echo $output;
}

但在这一点上,它变得非常混乱。您需要记住,PHP 个文件只是 html 个 具有好处 的文件。所以你可以简单地写你的 HTML 正常,然后在你的循环和其他 php 相关的东西中使用 php 标签:

// rest of the php file
// we are closing the php for now
?> 
<div class="table-responsive">
   <table class="table table-bordered">
      <form>
         <!-- The first loop starts here -->
         <?php while($row = $result->fetch_assoc()): ?>
         <tr>
            <td width="30%"><label>Price</label></td>
            <td>
               <div class="form-group">
                  <! -- note here, that <?= ?> is an alias for <?php echo ?> -->
                  <input type="text" class="form-control"  placeholder="<?= $row['price'] ?>">
               </div>
            </td>
         </tr>
         <tr>
            <td width="30%"><label>Writer</label></td>
            <td>
               <div class="form-group">
                  <select class="form-control" id="">
                     <!-- the second loop starts here -->
                     <?php while($col = $res->fetch_assoc()): ?>
                       <option value="" disabled selected><?= $row['name'] ?></option>
                       <option value="" ><?= $col['username'] ?></option>
                     <?php endwhile; ?>
                     <!-- the second loop ends here -->
                  </select>
               </div>
            </td>
         </tr>
         <?php endwhile; ?>
         <!-- the first loop ends here -->
      </form>
   </table>
</div>

注意 PHP 如何不在 内部 HTML,我们用组合替换括号 ( { )冒号和 endwhile;.

虽然此方法可能存在争议,但我更喜欢它而不是您之前使用的方法。