使用while循环将列保持在同一行中,直到标题结果不同

时间:2019-02-23 20:19:00

标签: php mysql bootstrap-4

我想显示如下所示,但是直到状态发生变化,我才能到达在同一行中并排显示属于某个状态的地址的任何东西。

<h1>State1</h1>

<div class="row">
   <div class="col-sm-3">
      <h2>City1</h2>
      <p>Address1</p>
   </div>

***如果下一个地址处于相同状态:

   <div class="col-sm-3">
      <h2>City2</h2>
      <p>Address2</p>
   </div>
</div><!-- ROW -->

    <hr>

***地址将在同一行中,直到状态不同,然后关闭div。

**如果下一个地址不是处于同一状态

<h1>State2</h1>

<div class="row">
   <div class="col-sm-3">
      <h2>City3</h2>
      <p>Address3</p>
   </div>
...
</div> <!-- ROW -->

我正在使用:

        <?php
        $query = "SELECT * FROM places";
        $select_all_places = mysqli_query($connection, $query);

        $current_state = '';

        while($row = mysqli_fetch_assoc($select_all_places)){
            $p_state = $row['p_state'];
            $p_city = $row['p_city'];
            $p_address = $row['p_address'];

        ?>
            <?php if($current_state != $p_state): ?>
                <h1><?php echo $p_state; ?></h1>
                <?php $current_state = $p_state; ?>
<div class="row">
            <?php endif; ?>

            <div class="col-sm-3">
               <h2><?php echo $p_city; ?></h2>
               <p><?php echo $p_address; ?></p>
            </div>
</div>

        <?php } ?>

1 个答案:

答案 0 :(得分:1)

您需要按状态对地址进行排序,以确保列出所有一个状态,然后才转到另一状态。

此代码即可完成

<?php
    $select_all_places = mysqli_query($connection,"SELECT * FROM places ORDER BY p_state ASC");
    $current_state = '';
    while($row = mysqli_fetch_assoc($select_all_places))
    {
        if($current_state != $row['p_state'])
        {
            if($current_state!='')
            {
                echo'</div>';
            }
            $current_state = $row['p_state'];
            echo '<h1>'.$row['p_state'].'</h1><div class="row">';
        }
        echo'<div class="col-sm-3"><h2>'.$row['p_city'].'</h2><p>'.$row['p_address'].'</p></div>';
    }
?>

它从数据库中获取排序的地址。

循环通过它们并显示H1标头,然后状态更改。

如果之前有一个状态列表,则关闭先前状态的div元素。