【问题标题】:Creating Nested Multidimensional Array with Loop from Database从数据库中创建带有循环的嵌套多维数组
【发布时间】:2017-11-14 06:49:28
【问题描述】:

我已经为此工作了好几天,几乎把我的头发拔掉了。

我正在尝试从 FOREACH 循环中输出 JSON,以便可以使用它来制作每日课程表的模板。我已经完成了大部分工作,但事情继续发生或出现意外。

下面的代码产生了这个:

 {
"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);

}

提前谢谢大家。

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案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);

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2018-03-31
    • 2019-12-29
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    相关资源
    最近更新 更多