【问题标题】:Using nested for loop to display data使用嵌套 for 循环显示数据
【发布时间】:2018-11-28 16:37:24
【问题描述】:

我有存储在 MySQL 数据库中的登录数据。从这些数据中,我成功地能够按性别组织每月对登录进行分组。例如,1 月 1400 名男性用户和 1500 名女性用户登录。

现在我正在努力在表格中显示数据。

目前,我的设置是这样的:

<div role="tabpanel" class="tab-pane fade active in" id="tab_content1" aria-labelledby="home-tab">
  <table id="datatable-fixed-header" class="table table-striped table-bordered">
    <thead>
      <tr>
        <th>Month</th>
        <th>Male Logins</th>
        <th>Female Logins</th>
      </tr>
    </thead>
    <tbody>
      <?php
        foreach ($maleLogin as $maleLog){
          $mthDateTime = DateTime::createFromFormat('n', $maleLog->month);
          foreach ($femaleLogin as $femaleLog) {
      ?>
      <tr>
        <td><?php echo $mthDateTime->format('F').' '.$maleLog->year; ?></td>
        <td><?php echo $maleLog->count;?></td>
        <td><?php echo $femaleLog->count;?></td>
      </tr>
      <?php } }?>
    </tbody>
  </table>
</div>

问题在于我的嵌套 for 循环。 Currently, it displays the data like so.

【问题讨论】:

  • 表的结构是什么?我认为最好的方法是在同一个对象/数组上获取男性/女性日志的计数,所以你应该只使用一个 for 循环。
  • @MikeVelazco 你是什么意思结构?我必须使用两个循环的原因是因为男性和女性的登录数据来自他们接受的个人表。

标签: php html mysql codeigniter nested-loops


【解决方案1】:

问题是每个男性都在循环遍历每个女性,我建议使用某种 sql 查询,根据日期连接男性和女性

SELECT * from male m LEFT join female f on m.date = f.date

类似的东西

【讨论】:

  • 数据存储在两个不同的表中。不知道如何使用一条 sql 语句从两个单独的表中查询数据。
  • 就像我在示例中展示的那样,您可以使用连接(左连接、内连接等)将 2 个表连接在一起,并且您可以拥有 1 个带有组合数据的变量w3schools.com/sql/sql_join_left.asp
  • 这是有道理的。但是我最终使用了 DFriend 的解决方案。更直接。
【解决方案2】:

对于嵌套循环中存在的每个女性登录,您将多次显示每个男性登录。也许只使用 1 个 foreach 循环并显示所有信息,即使是 0?

<?php
        foreach ($Login as $Log){
              if(maleLog)
                    do something for male login
              else
                    do something for female login
        }
?>

...类似的东西。 不过,上面的 SQL 语句可能是您的最佳选择...

【讨论】:

    【解决方案3】:

    我相信这对你有用。它使用foreach$key =&gt; $value 形式。 $key 用于获取想要的女性计数值。

    仅当您的两个数据集确实具有完全相同的数字记录并且排序完全相同时,这才有效。

    注意:我使用Alternative syntax for control structures 是因为这是一种习惯,而且因为在 IMO 中,当您进出 PHP 处理器时更容易阅读。同样,我使用 &lt;?= 而不是 &lt;?php echo,因为它的输入要少得多。

    <tbody>
        <?php
        foreach ($maleLogin as $key => $maleLog):
            $mthDateTime = DateTime::createFromFormat('n', $maleLog->month);
            ?>
            <tr>
                <td><?= $mthDateTime->format('F').' '.$maleLog->year; ?></td>
                <td><?= $maleLog->count; ?></td>
                <td><?= $femaleLogin[$key]->count; ?></td>
            </tr>
        <?php endforeach; ?>
    </tbody>
    

    【讨论】:

    • 我收到以下错误:$femaleLogin 是一个未定义的变量。
    • 您在问题中使用了该变量。它是如何设置在那里的?我的假设是它从控制器传递到视图。没有?
    • 对不起,你是对的。这是我的一个错字。这行得通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2019-09-24
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多