试图将一个3层的学期,班级,学生组成一个等候名单清算页面。这是我用来创建数组的foreach,但有些东西是不对的。结果数组不适合循环并制作一个html表 术语>课程>学生。 我的foreach看起来像这样
foreach ($active_terms as $term) {
$waitlists[ $term['term_id'] ] = $term;
foreach ($active_courses as $course) {
if ( ($course['term_id'] == $term['term_id']) && ($course['students_waitlisted'] > 0) ) {
$waitlists[ $term['term_id'] ][ $course['course_id'] ] = $course;
foreach ($waitlisted_reservations as $reservation) {
if ( ($term['term_id'] == $reservation['term_id'])
&& ($course['course_id'] == $reservation['course_id']) ) {
$waitlists[ $term['term_id'] ][ $course['course_id'] ][ $reservation['reservation_id'] ] = $reservation;
}
}
}
}
}
并且结果数组很接近,但看起来像这样:
Array
(
[1] => Array
(
[term_id] => 1
[term_title] => Summer Session 1
[term_begin_date] => June 25 2012
[3] => Array
(
[term_id] => 1
[course_id] => 3
[course_title] => Biology 1
[course_student_limit] => 8
[students_reserved] => 6
[students_registered] => 0
[students_waitlisted] => 3
[175] => Array
(
[term_id] => 1
[course_id] => 3
[reservation_id] => 175
[reservation_grade_level] => 12
[student_sis_id] => 289055
)
[173] => Array
(
[term_id] => 1
[course_id] => 3
[reservation_id] => 173
[reservation_grade_level] => 08
[student_sis_id] => 111988
)
)
)
[2] => Array
(
[term_id] => 2
[application_id] => 2
[term_title] => Summer Session 2
[term_begin_date] => July 23 2012
[18] => Array
( ....
有人可以指出我如何正确地制作父子巢吗?或者这个数组是否正确,我已经搞砸了如何使用嵌套的foreach来构建表格?
答案 0 :(得分:0)
你必须再引入一个级别。例如,替换:
$waitlists[ $term['term_id'] ][ $course['course_id'] ] = $course;
有了这个:
$waitlists[ $term['term_id'] ]['courses'][ $course['course_id'] ] = $course;
<强>更新强>
为了保持理智,您还可以使用foreach
中的引用,例如:
foreach ($active_terms as $term) {
$waitlists[ $term['term_id'] ] = $term;
foreach ($active_courses as $course) {
if ( ($course['term_id'] == $term['term_id']) && ($course['students_waitlisted'] > 0) ) {
$waitlists[ $term['term_id'] ][ $course['course_id'] ] = $course;
也可以写成:
foreach ($active_terms as $term) {
$waitlists[ $term['term_id'] ] = $term;
$current_courses = &$waitlists[ $term['term_id'] ]['courses'];
foreach ($active_courses as $course) {
if ( ($course['term_id'] == $term['term_id']) && ($course['students_waitlisted'] > 0) ) {
$current_courses[ $course['course_id'] ] = $course;
缩短变量名称。你可以从那里解决剩下的问题:)