php - 未定义的偏移量:获取数组时 php 中的 32
问题描述
<?php
$uid = $_SESSION['UID'];
$result = mysqli_query($conn,"SELECT user.*,score.* from `user` join score ON user.USERID=score.USERID WHERE user.USERID='$uid' ");
if (!$result) {
printf("Error: %s\n", mysqli_error($conn));
exit();
}
function dataBlock($row) {
return "<td>".$row['SCORE']."</td>".
"<td>".$row['AVERAGE']."</td>".
"<td>".$row['POINTS']."</td>";
}
$numModules = 4;
$rows = [];
while($row = mysqli_fetch_array($result)) {
$rows[$row['USERID']][$row['ACTCODE']].push(dataBlock($row));
}
foreach($rows as $row) {
echo '<tr>';
for ($k = 0 ; $k < $numModules; $k++) {
echo $row[$k];
}
echo '</tr>';
}?>
电流输出
我想要的输出是如果数据库中 USER 的 ACTCODE 的值为 1,那么它应该在课程考试行的输出中,如果在模块 1 行中,则为 2,如果在模块 2 行中,则为 3,依此类推
错误显示在这一行 $rows[$row['USERID']][$row['ACTCODE']].push(dataBlock($row));
解决方案
您正在$row
错误地读取数组。如果您使用的是 WHILE 循环,则需要指定一个索引并在每次循环时递增它
$i = 0;
while($row = mysqli_fetch_array($result))
{
$rows[$row[$i]['USERID']][$row[$i]['ACTCODE']].push(dataBlock($row));
$i++;
}
原因是$row
当您从数据库分配输出时,它变成了一个数组,并且从数据库中检索到的每一行都被索引为一个数组元素。Aprint_r($row)
将显示类似于此的内容:
$row => array(
[0] => array(
[USERID] => row 0 content 1
[ACTCODE] => row 0 content 2
)
[1] => array(
[USERID] => row 1 content 1
[ACTCODE] => row 1 content 2
)
[2] => array(
[USERID] => row 2 content 1
[ACTCODE] => row 2 content 2
)
)
这只是一个粗略的例子,但它有助于更好地可视化解释
推荐阅读
- java - 替换java中的多行字符串
- azure - 如何使用有状态集 kubernetes 将 cassandra 数据位置挂载到 azure 文件共享
- java - AlertDialog 未从另一个非活动类中显示
- security - QnAmaker 知识库隐私和安全
- php - Symfony 4.2 - 如何装饰 UrlGenerator
- python - 在 Tensorflow 中使用 MobileNetV2 训练 FasterRcnn
- javascript - 如何“使用具有一些默认选择的多复选框过滤器在服务器端过滤 Kendo Grid 数据”
- html - 如何为第 n 个孩子的内部 div 应用样式?
- oracle - 避免中间表的最佳方法是什么
- java - 将格式从输入默认更改为 Month D, YYYY