2017-11-14 4 views
-2

저는 며칠 동안이 작업을 해오 고 저의 머리카락을 거의 없애고 있습니다.데이터베이스에서 루프가있는 중첩 다차원 배열 만들기

FOREACH 루프에서 JSON을 출력하려고하므로 일일 클래스 일정을 템플릿으로 사용할 수 있습니다. 나는 거기에있는 길의 대부분을 가지고 있으며, 일이 예기치 않게 끊어 지거나 나옵니다. 당신이 볼 수 있듯이, 나는 "CLASS"아래에 중첩 된 "학생"을 싶습니다

{ 
"DAY": "TUESDAY", 
"TIME": { 
    "530": { 
     "CLASSES": [ 
      { 
       "CLASS": { 
        "INSTRUCTOR": "DANA", 
        "CLASS_LEVEL": "JUNIOR", 
        "MAX_STUDENTS": "8" 
       } 
      }, 
      { 
       "CLASS": { 
        "STUDENTS": [ 
         { 
          "STUDENT": [ 
           { 
            "FIRST NAME": "Alexandra", 
            "LAST NAME": "", 
            "DATE OF BIRTH": "" 
           } 
          ] 
         } 
        ] 
       } 
      }, 
      { 
       "CLASS": { 
        "STUDENTS": [ 
         { 
          "STUDENT": [ 
           { 
            "FIRST NAME": "Leivi", 
            "LAST NAME": "", 
            "DATE OF BIRTH": "" 
           } 
          ] 
         } 
        ] 
       } 
      }, 
      { 
       "CLASS": { 
        "STUDENTS": [ 
         { 
          "STUDENT": [ 
           { 
            "FIRST NAME": "Traivon", 
            "LAST NAME": "", 
            "DATE OF BIRTH": "" 
           } 
          ] 
         } 
        ] 
       } 
      }, 
      { 
       "CLASS": { 
        "STUDENTS": [ 
         { 
          "STUDENT": [ 
           { 
            "FIRST NAME": "Keira", 
            "LAST NAME": "", 
            "DATE OF BIRTH": "" 
           } 
          ] 
         } 
        ] 
       } 
      }, 
      { 
       "CLASS": { 
        "STUDENTS": [ 
         { 
          "STUDENT": [ 
           { 
            "FIRST NAME": "Madison", 
            "LAST NAME": "", 
            "DATE OF BIRTH": "" 
           } 
          ] 
         } 
        ] 
       } 
      }, 

그러나 :

아래 코드는 생성했다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 나는 내 인생을 위해 그것을 이해할 수 없다. 나는 다차원 배열을 싫어하기 시작했다. : -}

function dailySchedule() { 
    global $conn; 
    $sql = 'SET DATEFIRST 1 

      SELECT [DAY].[DAY] AS [DAY], CLASS.CLASSTIME AS CLASSTIME, CLASSLEVEL.CLASSLEVEL AS CLASSLEVEL, CLASS.MAXSTUDENT AS MAXSTUDENT, 
      INSTRUCTOR.FIRSTNAME AS INSTRUCTOR, STUDENT.FIRSTNAME AS STUDENTFIRST, STUDENT.SURNAME AS STUDENTLAST, STUDENT.DOB AS STUDENTDOB 

      FROM STUDENT JOIN BOOKING ON STUDENT.ID = BOOKING.STUDENTID JOIN CLASS ON CLASS.ID = BOOKING.CLASSID JOIN CLASSLEVEL ON 
      CLASS.CLASSLEVELID = CLASSLEVEL.ID JOIN [DAY] ON CLASS.CLASSDAY = [DAY].ID JOIN INSTRUCTOR ON CLASS.INSTRUCTORID = INSTRUCTOR.ID 

      WHERE [DAY].ID = (DATEPART(dw, GETUTCDATE() AT TIME ZONE \'AUS Eastern Standard Time\')) 

      ORDER BY CLASS.CLASSTIME ASC, INSTRUCTOR.FIRSTNAME ASC, CLASSLEVEL.CLASSLEVEL ASC'; 


    $studentDetails = 
    $sqlEx = $conn->query($sql); 
    $schedule = array(); 

    foreach($sqlEx as $rows) { 

     if(!isset($day) || $day !== $rows['DAY']) { 
      $day = $rows['DAY']; 
      $schedule = array('DAY' => $day) + $schedule; 
     } 
     if(!isset($time) || $time !== $rows['CLASSTIME']) { 
      $time = $rows['CLASSTIME']; 
     } 
     if(!isset($instructor) || $instructor !== $rows['INSTRUCTOR']) { 
      $instructor = $rows['INSTRUCTOR']; 
      $schedule['TIME'][$time]['CLASSES'][]['CLASS'] = [ 
       'INSTRUCTOR' => $instructor, 
       'CLASS_LEVEL' => $rows['CLASSLEVEL'], 
       'MAX_STUDENTS' => $rows['MAXSTUDENT'], 
      ]; 
     } 

     //if($instructor == $rows['INSTRUCTOR']){ 
      $schedule['TIME'][$time]['CLASSES'][]['CLASS']['STUDENTS'][]['STUDENT'][] = [ 
        'FIRST NAME' => $rows['STUDENTFIRST'], 
        'LAST NAME' => $rows['STUDENTLAST'], 
        'DATE OF BIRTH' => $rows['STUDENTDOB'] 
        ]; 


     //} 

    } 
    echo json_encode($schedule, JSON_PRETTY_PRINT); 

@ 사전 모두에

감사합니다. 잘 모르겠어요

+0

와 [mcve을] – pvg

답변

-1

당신이 원하는 무엇인지하지만 내 머리 위로 나는 방법이 다른 접근 방식 사용합니다 : 당신은 [질문]에서 살펴 보셔야합니다

$schedule = array(); 

    foreach($sqlEx as $rows) { 

     $Day = $rows["DAY"]; 
     $ClassTime = $rows["CLASSTIME"]; 
     $ClassLevel = $rows["CLASSLEVEL"]; 
     $MaxStudents = $rows["MAXSTUDENTS"]; 
     $Instructor = $rows["INSTRUCTOR"]; 
     $StudentFirst = $rows["STUDENTFIRST"]; 
     $StudentLast = $rows["STUDENTLAST"]; 
     $StudentDOB = $rows["STUDENTDOB"]; 


     $schedule[$Day][$ClassTime]["CLASS"] = array("INSTRUCTOR" => $Instructor,"CLASS_LEVEL" =>$ClassLevel,"MAX_SUTENTS" => $MaxStudents); 
     $schedule[$Day][$ClassTime]["STUDENT"] = array("FIRSTNAME" => $StudentFirst ,"LASTNAME" => $StudentLast, "DATE OF BIRTH" => $StudentDOB); 

    } 

    echo json_encode($schedule, JSON_PRETTY_PRINT);