【问题标题】:PHP joining row from databasePHP从数据库中加入行
【发布时间】:2016-11-02 11:01:39
【问题描述】:

我需要一个建议,如何在 PHP 中显示数组中的数据(sql 查询的结果)。

问题来了:

我的查询结果是 2 行(上图)。目前,我正在使用foreach 方法显示所有数据,因此foreach 将迭代2 次,对吧?

现在,我想问: 在我的网页中,如何才能像下图一样显示?

如何将第二行(理论分0分,实验分75分80分)加入第一行?所以 ID 112 只有 1 行。

编辑:

SQL 查询不是我的职责。我刚刚收到该数据(上图),我的工作只是将其显示到网页上。

【问题讨论】:

  • 您当前的 SQL 是什么?您需要使用SUM()GROUP BY
  • @ZamronyP.Juhara SQL 查询不是我的职责。我刚刚收到该数据(上图),我的工作只是将其显示到网页上。
  • 显示你正在使用foreach的两个数组,因为我们想看看你是如何从查询中接收数据的?
  • 显示用于显示未按 id 分组的表格的实际 PHP 代码是否会打扰您?

标签: php html mysql for-loop foreach


【解决方案1】:

就像您过去使用 foreach 显示行一样,您可以这样做:

* create new array
* loop through your current array
* save to new array by ID and do SUMs
* you can do output from newly created array.

【讨论】:

    【解决方案2】:
    • 在当前数组中循环创建新数组,这可能会使用array_walk_recursive()array_map()array_filter() 过滤掉0 个值
    • 那么在这个阶段你得到了过滤数组
    • 您可以从过滤后的数组中进行输出

    【讨论】:

      【解决方案3】:

      我想知道为什么你有两行具有相同的“id”。通常'id'应该是主键...... 无论如何,您可以简单地将具有相同“id”的行组合起来,添加同名字段,将它们转换为整数。

      编辑 1-2: 假设代码在关联数组中:

      $rows = array(
          0 => array(
              'id' => 112,
              'theory' => array('score1' => 70, 'score2' => 80),
              'lab' => array('score1' => 0, 'score2' => 0)
          ),
          1 => array(
              'id' => 112,
              'theory' => array('score1' => 0, 'score2' => 0),
              'lab' => array('score1' => 75, 'score2' => 80)
          ),
          2 => array(
              'id' => 110,
              'theory' => array('score1' => 0, 'score2' => 0),
              'lab' => array('score1' => 75, 'score2' => 80)
          )  
      );  
      // New buffer for data
      $newArray = array();  
      // Loop to combine buffer
      foreach ($rows as $row) {
          if (array_key_exists($row['id'], $newArray)) 
          {
              $newArray[$row['id']]['theory']['score1'] += $row['theory']['score1'];
              $newArray[$row['id']]['theory']['score2'] += $row['theory']['score2'];
              $newArray[$row['id']]['lab']['score1'] += $row['lab']['score1'];
              $newArray[$row['id']]['lab']['score2'] += $row['lab']['score2'];
          } else {
              $newArray[$row['id']]['theory']['score1'] = $row['theory']['score1'];
              $newArray[$row['id']]['theory']['score2'] = $row['theory']['score2'];
              $newArray[$row['id']]['lab']['score1'] = $row['lab']['score1'];
              $newArray[$row['id']]['lab']['score2'] = $row['lab']['score2'];
          }
      }  
      // Loop to show data
      foreach ($newArray as $key => $value) {
          echo $key." ".$value['theory']['score1']." ".$value['theory']['score2']." ".$value['lab']['score1']." ".$value['lab']['score2']."\n";
      }
      

      输出:

      112 70 80 75 80
      110 0 0 75 80
      

      【讨论】:

      • 嗯实际上还有其他字段使它成为两行,但我没有写它。以及如何“将具有相同'id'的行组合起来”??
      • 使用 foreach 循环加入新数组中的数据,并使用不同的 foreach 循环显示数据。
      • 放一个 var_dump($row) 代码将在 5 分钟后出现在这篇文章中。
      【解决方案4】:

      假设您以数组形式接收数据:

      $data=array();
      $data[0]=[112,70,80,0,0];
      $data[1]=[112,0,0,75,80];
      $data[2]=[113,71,81,0,0];
      $data[3]=[113,0,0,76,81];
      

      如果您事先知道每个 ID 将恰好有两条记录:

      echo '<table>';
      echo '<thead>';
      echo '<tr>';
      echo '<th rowspan="2">ID</th><th colspan="2">theory</th><th colspan="2">lab</th>';
      echo '</tr>';
      echo '<tr>';
      echo '<th>score1</th><th>score2</th><th>score1</th><th>score2</th>';
      echo '</tr>';
      echo '</thead>';
      echo '<tbody>';
      for($i=0;$i<count($data);$i++)
      {
        $d=$data[$i];
        echo '<tr>';
        echo '<td>'.$d[0].'</td>'; //ID
        echo '<td>'.$d[1].'</td><td>'.$d[2].'</td>';
        $d=$data[++$i]; //take next element from array
        echo '<td>'.$d[3].'</td><td>'.$d[4].'</td>';
        echo '</tr>';
      }
      echo '</tbody>';
      echo '</table>';
      

      PHPfiddle 上的代码。

      但通常,您的 SQL 查询应该更改以表示透视数据,然后您就不会遇到此问题。但是,您强调这超出了您的能力范围。

      【讨论】:

      • @joshua14 这段代码的结果完全符合您的要求,为什么您认为它没有用?跑进去看看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2021-01-23
      相关资源
      最近更新 更多