用PHP在数组中输入/覆盖信息

用PHP在数组中输入/覆盖信息,php,mysql,arrays,Php,Mysql,Arrays,我有一个小的PHP页面,它从MySQL获取数据,并通过PHP在月历中显示。我无法在数组中正确排列数据以获得所需的输出 首先,我将描述我希望发生的事情: 学生们在一周的固定时间上课 他们也可以预订或取消预订 日历还显示学校不开放的日期 为了在日历上显示这些数据,我使用MySQL从各种来源输出数据,然后用PHP将数据输入到一个数组中,然后按日期排序并输出 我的问题是,我希望每天能够处理多行数据,但是因为我使用日期作为键,所以我每天只能显示一个结果。如果我使用循环在键中添加一个计数器来追加日期,那

我有一个小的PHP页面,它从MySQL获取数据,并通过PHP在月历中显示。我无法在数组中正确排列数据以获得所需的输出

首先,我将描述我希望发生的事情:

  • 学生们在一周的固定时间上课
  • 他们也可以预订或取消预订
  • 日历还显示学校不开放的日期
为了在日历上显示这些数据,我使用MySQL从各种来源输出数据,然后用PHP将数据输入到一个数组中,然后按日期排序并输出

我的问题是,我希望每天能够处理多行数据,但是因为我使用日期作为键,所以我每天只能显示一个结果。如果我使用循环在键中添加一个计数器来追加日期,那么在有人进行了预订,然后在同一天取消了预订的情况下,我会得到重叠的结果

至于我的代码

首先,我检查学生是否注册了每周一次的课程,然后将该课程输入数组

$sql = "SELECT StudentDB.studentid, ClassDB.classID, ClassDB.class_level, ClassDB.class_title, ClassDB.time, ClassDB.teacher, StudentDB.first_name, StudentDB.last_name, StudentDB.payment_amount, ClassDB.day 
            FROM ClassDB 
            INNER JOIN RegDB ON ClassDB.classID = RegDB.classid 
            INNER JOIN StudentDB ON StudentDB.studentID = RegDB.studentid 
            WHERE StudentDB.studentid = '$studentid'";

    $result = $conn->query($sql);

    if ($result->num_rows > 0) {


      while($row = $result->fetch_assoc()) {   // DISPLAY REGULAR CLASS DATA

        $dayofclass = $row['day'];
        $class_level = $row['class_level'];
        $class_title = $row["class_title"];
        $day = $row["day"];
        $class_time = $row["class_time"];
        $time = $row["time"];




        // check which dates match the days of the week and store in an array

        for ($i=1;$i<=$n;$i++){

          if ($i<10) {
            $i = "0" . $i;
          }

          $day=date("l",strtotime($yearmonth.$i)); //find weekdays

          if($day==$dayofclass){
            $time = date("H:i",strtotime($row['time']));
            $dates[]=$yearmonth.$i;
            $datesdata[$yearmonth.$i] = "0";
            $timedata[$yearmonth.$i] = $time;
            $classiddate[$yearmonth.$i] = $row['classID'];
          }
        }
     }
      echo "</table>";
      $conn->close();
    } 
$sql=“选择StudentDB.studentid、ClassDB.classID、ClassDB.class\u级别、ClassDB.class\u标题、ClassDB.time、ClassDB.teacher、StudentDB.first\u姓名、StudentDB.last\u姓名、StudentDB.payment\u金额、ClassDB.day
来自ClassDB
ClassDB.classID=RegDB.classID上的内部联接RegDB
StudentDB.studentID=RegDB.studentID上的内部联接StudentDB
其中StudentDB.studentid='$studentid';
$result=$conn->query($sql);
如果($result->num_rows>0){
而($row=$result->fetch_assoc()){//显示常规类数据
$dayofclass=$row['day'];
$class_level=$row['class_level'];
$class_title=$row[“class_title”];
$day=$row[“day”];
$class_time=$row[“class_time”];
$time=$row[“time”];
//检查哪些日期与一周中的几天匹配,并存储在数组中
对于($i=1;$iclose();
} 
之后,我检查特定的预订(取消、不规则预订、等待列表),并将它们输入到数组中:

        $lowerlimit = $yearmonth . "01";
    $upperlimit = $yearmonth . "31";

    $sql = "SELECT AttendanceDB.*, ClassDB.* 
    FROM StudentDB 
    INNER JOIN AttendanceDB ON StudentDB.studentid = AttendanceDB.studentid 
    INNER JOIN ClassDB ON AttendanceDB.classid = ClassDB.classID
    WHERE StudentDB.studentid = '$studentid' 
    AND AttendanceDB.class_time >= '$lowerlimit'
    AND AttendanceDB.class_time <= '$upperlimit'";

    $result = $conn->query($sql);

    if ($result->num_rows > 0) {  

      $loopcount = 0;

      // store furikae data in the array
      while($row = $result->fetch_assoc()) {  

        $phpdate = strtotime( $row["class_time"] );
        $time = date("H:i",strtotime($row['time']));
        $mysqldate = date( 'Y-m-d', $phpdate );
        $loopcount++;
        $mysqldate = $mysqldate . "+" . $loopcount;


//            $loopcount++;
//            $mysqldate = $mysqldate . "+" . $loopcount;






        $previousdate = $mysqldate;
        $previousfurikae = $row['furikae'];


        if ($row["furikae"] == 3){
          $dates[]=$mysqldate;
          $datesdata[$mysqldate] = "1";
          $timedata[$mysqldate] = $time;
          $classiddate[$mysqldate] = $row['classID'];
        } elseif ($row["furikae"] == 8 OR $row["furikae"] == 7) {
          $dates[]=$mysqldate;
          $datesdata[$mysqldate] = "3";
          $timedata[$mysqldate] = $time;
        } elseif ($row["furikae"] == 2) {
          $dates[]=$mysqldate;
          $datesdata[$mysqldate] = "2";
          $timedata[$mysqldate] = $time;
        }              
      }
    } 

    $conn->close();
$sql = "SELECT * 
    FROM SchoolScheduleDB 
    WHERE date >= '$lowerlimit'
    AND date <= '$upperlimit'";

    $result = $conn->query($sql);

    if ($result->num_rows > 0) {  

      // store furikae data in the array
      while($row = $result->fetch_assoc()) {  

        $phpdate = strtotime( $row["date"] );
//            $time = date("H:i",strtotime($row['time']));
//            $mysqldate = date( 'Y-m-d', $phpdate ) . " " . $time;
          $mysqldate = date( 'Y-m-d', $phpdate );
          $dates[]=$mysqldate;
          $datesdata[$mysqldate] = "666";

      }
    } 

    $conn->close();
$lowerlimit=$yearmonth.“01”;
$upperlimit=$yearmonth.“31”;
$sql=“选择AttendanceDB.*,ClassDB.*
来自StudentDB
StudentDB.studentid=AttendanceDB.studentid上的内部联接AttendanceDB
AttendanceDB.classid=ClassDB.classid上的内部联接ClassDB
其中StudentDB.studentid='$studentid'
上课时间>='lowerlimit'
上课时间='lowerlimit'

和日期您可以使用带边框的括号为每个日期创建子数组:

$data[20180528][] = 'aa';
$data[20180528][] = 'bb';
$data[20180529][] = 'cc';
$data[20180529][] = 'dd';
$data[20180529][] = 'ee';
将为您提供如下数组:

20180528 => aa
         => bb

20180529 => cc
         => dd
         => ee