我需要一个如何在PHP中显示数组(sql查询结果)的数据的建议。
问题在于:
我的查询结果是2行(上图)。目前,我正在使用foreach
方法显示所有数据,因此foreach
将迭代2次,对吧?
现在,我想问: 在我的网页中,我如何能够像底部图一样显示?
如何将第二行(理论得分为0,实验室得分为75和80)加入第一行?因此ID 112只有1行。
修改
SQL查询不是我的职责。我刚收到这些数据(上图),我的工作只是将其显示在网页上。
答案 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()
答案 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查询以表示轮转数据,然后您就不会遇到此问题。但是,你强调这是你的力量。