php - 我的循环创建另一个父数组而不是将其附加到我指向的位置?

标签 php arrays multidimensional-array

我需要循环访问我的数据库,并能够在日期、时间、类(class)和学生之间进行分组。我已经能够使用一堆 if(!isset()) 语句来实现我使用此代码所追求的目标。

foreach ($sqlEx as $rows) {
    if(!isset($day) || $day !== $rows['DAY']) {
        $day = $rows['DAY'];
        $scheduleJSON['DAY'] = $day;
    }
    if(!isset($time) || $time !== $rows['CLASSTIME']) {
        $time = $rows['CLASSTIME'];
        $scheduleJSON[$time]= [];
        $scheduleJSON[NULL] = $scheduleJSON[$time];
        unset($scheduleJSON[NULL]);
    }
    if(!isset($instructor) || $instructor !== $rows['INSTRUCTOR']) {
        $instructor = $rows['INSTRUCTOR'];
        $classlevel = $rows['CLASSLEVEL'];
        $maxstudent = $rows['MAXSTUDENT'];
        $scheduleJSON[$time]['CLASSES'][]['CLASS'] = ['INSTRUCTOR' => $instructor, 'CLASS LEVEL' => $classlevel, 'MAX STUDENTS' => $maxstudent];
    } else {
        $studentfirst = $rows['STUDENTFIRST'];
        $studentlast = $rows['STUDENTLAST'];
        $scheduleJSON[$time]['CLASSES']['CLASS']['STUDENTS'][] = ['STUDENT' => ['FIRST NAME' => $studentfirst, 'LAST NAME' => $studentlast]];
    }
}

我正在考虑让我的数组具有以下结构:

$scheduleJSON = [
    'DAY' => NULL, 'TIME' => [
        'CLASSES' => [
            'CLASS' => [
                'INSTRUCTOR' => NULL, 'CLASS LEVEL' => NULL, 'MAX STUDENTS' => NULL, 'STUDENTS' => [
                    'STUDENT' => [
                        'FIRST NAME' => NULL, 'LAST NAME' => NULL, 'DATE OF BIRTH' => NULL, 'PARENT FIRST NAME' => NULL, 'PARENT LAST NAME' => NULL
                    ]
                ]
            ]
        ]
    ]
];

但是,当我打印到 JSON 编码时,我认为我的问题出在我的 else 语句中。它不是将 STUDENTS 作为类(class)中 MAX STUDENTS 之后的另一个 key => value 附加,而是创建另一个 CLASS数组。

"DAY": "THURSDAY",
"530": {
    "CLASSES": {
        "0": {
            "CLASS": {
                "INSTRUCTOR": "Teacher",
                "CLASS LEVEL": "JUNIOR",
                "MAX STUDENTS": "8"
            }
        },
        "CLASS": {
            "STUDENTS": [
                {
                    "STUDENT": {
                        "FIRST NAME": "Student",
                        "LAST NAME": ""
                    }
                },

此时任何帮助将不胜感激 - 我已经搜索问题和答案好几天了。

--编辑 来自 $sqlEx 的数组。请注意,出于隐私考虑,我已删除了随之而来的姓名数据。

array(20) {
  ["DAY"]=>
  string(8) "THURSDAY"
  [0]=>
  string(8) "THURSDAY"
  ["CLASSTIME"]=>
  string(3) "530"
  [1]=>
  string(3) "530"
  ["CLASSLEVEL"]=>
  string(6) "JUNIOR"
  [2]=>
  string(6) "JUNIOR"
  ["MAXSTUDENT"]=>
  string(1) "8"
  [3]=>
  string(1) "8"
  ["INSTRUCTOR"]=>
  string(4) "TEACHER"
  [4]=>
  string(4) "TEACHER"
  ["STUDENTFIRST"]=>
  string(5) "First Name"
  [5]=>
  string(5) "First Name"
  ["STUDENTLAST"]=>
  string(0) ""
  [6]=>
  string(0) ""
  ["STUDENTDOB"]=>
  string(10) "2007-04-28"
  [7]=>
  string(10) "2007-04-28"
  ["PARENTFIRST"]=>
  string(12) "Parent First Name"
  [8]=>
  string(12) "Parent First Name"
  ["PARENTLAST"]=>
  string(6) "Parent Last Name"
  [9]=>
  string(6) "Parent Last Name"
}

最佳答案

首先,添加INSTRUCTOR键时,必须删除['CLASSES']['之间的[]类']

$scheduleJSON[$time]['CLASSES']['CLASS'] = ['INSTRUCTOR' => $instructor, 'CLASS LEVEL' => $classlevel, 'MAX STUDENTS' => $maxstudent];

接下来,将 else 条件内的所有内容移到外部。基本上删除了 else 条件。

if(!isset($instructor) || $instructor !== $rows['INSTRUCTOR']) {
    // instructor codes
} // else is removed
$studentfirst = $rows['STUDENTFIRST'];
$studentlast = $rows['STUDENTLAST'];
$scheduleJSON[$time]['CLASSES']['CLASS']['STUDENTS'][] = ['STUDENT' => ['FIRST NAME' => $studentfirst, 'LAST NAME' => $studentlast]];

假设 STUDENTFIRST 到 PARENTLAST 的每个数据都是唯一的,这将有效地工作。没有重复的学生信息。否则,您需要一些东西来检查学生是否已经存在。

注意:我建议删除 else 条件,因为它不会覆盖第一个循环。因此,第一行的学生信息不会添加到 $scheduledJSON 中。 如果您需要 else 条件,则必须在 $instructor 的 IF 条件上添加学生的信息

关于php - 我的循环创建另一个父数组而不是将其附加到我指向的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47321169/

相关文章:

php - 如何在 Laravel 中包含从 JSON 到 MySQL 的数据

javascript - 插入数组对象

python - 如何存储多个不同长度的numpy一维数组并打印它

php - 如何在多维 JSON 数组中显示值

javascript - 控制台对 jquery ajax 请求没有响应

php - 重定向后的 HTTP 响应码

c++ - 如何使我的类像 Visual Studio 中的 std::array 和 std::vector 一样易于调试?

c++ - 是否可以使用手动输入制作 OpenCV 矩阵?

php - 如何从 MySQL 导出到我的 PHP 站点中的 Excel 文件?

php - 捕获成功插入的记录到数组中