首页 > 解决方案 > 未定义的偏移量:获取数组时 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));

标签: phphtmlarraysmysqliphpmyadmin

解决方案


您正在$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
      )
)

这只是一个粗略的例子,但它有助于更​​好地可视化解释


推荐阅读