使用嵌套的for循环显示数据

时间:2018-06-19 16:31:18

标签: php html mysql codeigniter nested-loops

我的登录数据存储在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.

3 个答案:

答案 0 :(得分:1)

问题在于foreach男性,您正在遍历每个女性,我建议根据日期将男性和女性联系起来的某种sql查询

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

符合这些原则

答案 1 :(得分:1)

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

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

...类似的东西。 上面的SQL语句可能是您最好的选择...

答案 2 :(得分:0)

我相信这对您有用。它使用$key => $value的{​​{1}}形式。 foreach用于获取所需的女性计数值。

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

注意:我使用Alternative syntax for control structures是因为它是一种习惯,并且因为IMO,当您跳入和跳出PHP处理器时,它更易于阅读。同样,我使用$key而不是<?=,因为它的键入要少得多。

<?php echo