我的项目中有一个模块,用于在课堂时间表中找到免费的地方。我从数据库中获取没有问题的变量。我需要一个数组,它是所有教室的回报,这是我在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>";
答案 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