未定义的偏移量:在php中获取数组时为32
电流输出 我想要的输出是,如果数据库中用户的ACTCODE值为1,则它应该在课程考试行的输出中,如果在模块1行中为2,如果在模块2行中为3,依此类推 错误显示在这一行中 $rows[$row['USERID'][$row['ACTCODE']] 您读取的$row数组不正确。如果使用WHILE循环,则需要指定一个索引,并在循环的每个过程中递增该索引未定义的偏移量:在php中获取数组时为32,php,html,arrays,mysqli,phpmyadmin,Php,Html,Arrays,Mysqli,Phpmyadmin,电流输出 我想要的输出是,如果数据库中用户的ACTCODE值为1,则它应该在课程考试行的输出中,如果在模块1行中为2,如果在模块2行中为3,依此类推 错误显示在这一行中 $rows[$row['USERID'][$row['ACTCODE']] 您读取的$row数组不正确。如果使用WHILE循环,则需要指定一个索引,并在循环的每个过程中递增该索引 <?php $uid = $_SESSION['UID'];
<?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>';
}?>
原因是,当您分配来自数据库的输出时,$row成为一个数组,并且从数据库检索到的每一行都作为数组元素进行索引。print_r$行将显示类似的内容:
$i = 0;
while($row = mysqli_fetch_array($result))
{
$rows[$row[$i]['USERID']][$row[$i]['ACTCODE']].push(dataBlock($row));
$i++;
}
这只是一个粗略的例子,但它有助于更好地可视化解释。实际需要的是$rows[$row['USERID'][$row['ACTCODE']][]=dataBlock$row;尝试代码后,有一个未定义的偏移量错误:echo$row[$k]中的0@NickIn表示,foreach,$row将是一个数组,它由数据库中的ACTCODE值索引。所以不能保证它的索引为0。您可能应该改用foreach,例如foreach$row作为$v{echo$v;}这是不正确的$行将是一个包含键USERID、ACTCODE等的数组。是和否。键实际上是USERID、ACTCODE和查询结果中的任何其他内容,但$row将使用行号进行索引。否则,将无法在数组中获得结果的特定行。执行打印\u r$行可以确认这一点
$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
)
)