2D数组不显示数据

时间:2016-12-19 19:49:00

标签: php mysql sql arrays multidimensional-array

我的项目中有一个模块,用于在课堂时间表中找到免费的地方。我从数据库中获取没有问题的变量。我需要一个数组,它是所有教室的回报,这是我在DB中有多少教室。这个教室也有可变的时间段1到12,每个时期有持续时间,例如,如果我在第4个时期3持续时间它应该写1 2 3 xxx 7 8 9 10 11 12如果我有另一个课程在第9个时期2持续时间它应该是1 2 3 xxx 7 8 xx 11 12.如果我在查询中给出class_no,我在一维数组中做到了。但它应该比教室更多。它只显示1行中的数字1..12。

$dayy = $_GET['src_day0'];
$drt = $_GET['src_duration0'];
$tm = $_GET['src_time0'];
$faculty_id = $_SESSION['faculty_id'];
$scale = "select DISTINCT t.class_no,t.time,t.duration from ttable t,class c where
          day='$dayy' AND (t.faculty='$faculty_id' OR c.faculty='$faculty_id')";
$result = $conn->query($scale);
$x = 1;
while ($rows = $result->fetch_assoc()) {
    $class = $rows['class_no'];
    $arr = array(
        array($x => "$class"),
        array(
            1 => " 1 ", 2 => " 2 ", 3 => " 3 ", 4 => " 4 ", 5 => " 5 ", 6 => " 6 ",
            7 => " 7 ", 8 => " 8 ", 9 => " 9 ", 10 => " 10 ", 11 => " 11 ", 12 => " 12 ",
        ));
    $x++;
}
while ($rows = $result->fetch_assoc()) {

    $time = $rows['time'];
    $duration = $rows['duration'];

    $result1 = ($time + $duration);
        for($j=1;$j<$x;$j++)
         for ($i = $time; $i < $result1; $i++)
              $arr[$j][$i] = "x1";
          }

}
for ($i = 1; $i < $x; $i++) {
    for ($j = 1; $j < 13; $j++)
        echo $arr[$i][$j];
    echo "</br>";

1 个答案:

答案 0 :(得分:0)

实际上你错过了你的阵列:)

如果您查看代码:

        $class = $rows['class_no'];
        $arr = array(
            array($x => "$class"),
            array(
                1 => " 1 ", 2 => " 2 ", 3 => " 3 ", 4 => " 4 ", 5 => " 5 ", 6 => " 6 ",
                7 => " 7 ", 8 => " 8 ", 9 => " 9 ", 10 => " 10 ", 11 => " 11 ", 12 => " 12 ",
            ));
        $x++;

对于循环的每次迭代,使用新值覆盖数组。

实际上,您需要创建一个新数据并将其附加到数组中。 一种方法,是以下过程:

$arr = [];
while ($rows = $result->fetch_assoc()) {
  $arr[ $rows['class_no'] ] = [1 => ' 1 ', 2 => ' 2 ', /*...*/];
}

// free memory if needed

while ($rows = $result->fetch_assoc()) {
  for( $i = $rows['time'] ; $i < $rows['time'] + $rows['duration'] ; $i++ ) {
    $arr[ $rows['class_no'] ][ $i ] = 'x';
  }
}

在这里,您创建一个数组类型的空变量$arr。然后,对于循环中的每个数据,您使用默认值创建了一个新行(对于每个class_no)。 在第二个循环中,您再次对结果进行迭代,但在此处,您将每个数组数据按class_no并将正确的时间值更改为x