PHP从数据库加入行

时间:2016-11-02 11:01:40

标签: php html mysql for-loop foreach

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

问题在于:

problem

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

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

如何将第二行(理论得分为0,实验室得分为75和80)加入第一行?因此ID 112只有1行。

修改

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

4 个答案:

答案 0 :(得分:0)

当你以前用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.

答案 1 :(得分:0)

  • 通过当前数组循环创建新数组,该数组可能会使用array_walk_recursive()array_map()array_filter()
  • 过滤掉0值
  • 然后在这个阶段你得到了过滤数组
  • 您可以从过滤后的数组输出

答案 2 :(得分:-1)

我想知道为什么你有两行具有相同的'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

答案 3 :(得分:-1)

我们假设您收到数据为数组:

$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查询以表示轮转数据,然后您就不会遇到此问题。但是,你强调这是你的力量。