我需要循环访问我的数据库,并能够在日期、时间、类(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/