foreach 只显示一个元素

foreach only displaying one element

请有人拯救我的理智并告诉我我做错了什么。

我有一个查询填充的数组,如果我对该数组执行 print_r,我会得到以下结果,

[classes] => Array ( 

[0] => Array ( [course_number] => 1[course_name] => Thai [course_date] => 2015-02-23  [instructor_name] => Aaron ) 

[1] => Array ( [course_number] => 2 [course_name] => Linguistics [course_date] => 2015-03-02  [instructor_name] => Aaron ) 

[2] => Array ( [course_number] => 3 [course_name] => Ethics [course_date] => 2015-03-02  [instructor_name] => Aaron ) 

[3] => Array ( [course_number] => 4 [course_name] => Vocabulary [course_date] => 2015-03-02  [instructor_name] => Aaron ) 

[4] => Array ( [course_number] => 5 [course_name] => Civilization [course_date] => 2015-03-09 [instructor_name] => Aaron ) 

[5] => Array ( [course_number] => 6 [course_name] => Statistics [course_date] => 2015-03-09 [instructor_name] => Aaron ) 

[6] => Array ( [course_number] => 7 [course_name] => English [course_date] => 2015-03-09 [instructor_name] => Aaron ) )

我正在使用以下内容尝试生成一个 table 与任何 class 在同一行的同一日期。

echo'   
<table>
    <caption><h1>Class Registration</h1></caption>
    <form action="',$scripturl,'?action=simsub_ENROL" method="POST" autocomplete="off">
    <input type=hidden name="studentid" value="' . $user_info['id'] . '">
    <tr>';

        $date = "2015-01-01";
        $i = 1;

        foreach ($simsub['classes'] as $record){
            if($date < $record['course_date']) {
                $i++;
                echo '</tr>
                        <td>
                            ' . $record['course_date'] . '
                        </td>               
                        <td>
                            ' . $record['course_number'] . ' - ' . $record['course_name'] . '<br />
                            ' . $record['instructor_name'] . '<br />
                        <input type="radio" name="class' . $i . '" value="' . $vrow['course_number'] . '
                        </td>';
            }else {
                echo '
                    <td>
                        ' . $record['course_number'] . ' - ' . $record['course_name'] . '<br />
                        ' . $record['instructor_name'] . '<br />
                        <input type="radio" name="class' . $i . '" value="' . $record['course_number'] . '
                    </td>';
            }

        $date = $record['course_date'];

    }

echo '
</tr>
<tr>
    <td>
    <div style="text-align:center"><input type="submit" class="button blue" value="Submit Registrations"></div>
    </td>   
</tr>
</form>
</table>';
  1. 当它输出时,我得到一个 table 显示 2 列,第一个日期值和泰语 class 的值,然后没有其他内容。看起来 foreach 循环永远不会返回执行第二个值。

  2. 提交按钮显示在与泰文 class 信息相同的 table 字段中?

我建议使用 strtotime 进行日期比较。 主要问题是您的单选按钮 HTML 缺少结束符 " />,这会阻止显示其他列。

I'm using the following to try and generate a table with any classes on the same date on the same row.

如果要在同一行显示同一日期的类,使用临时变量$date,则应在当前循环日期为</tr><tr>时打印</tr><tr>不等于结果的日期,在循环结束时,您应该打印 </tr> 以完成该行。但是,您的查询应按课程日期排序。您在 <table><tr> 之间的 <caption><form><input> 应该移到外面。

<?php
$simsub = array(
  'classes' => Array ( 
    0 => Array ( 'course_number' => 1, 'course_name' => 'Thai', 'course_date' => '2015-02-23', 'instructor_name' => 'Aaron' ), 
    1 => Array ( 'course_number' => 2, 'course_name' => 'Linguistics', 'course_date' => '2015-03-02', 'instructor_name' => 'Aaron' ),
    2 => Array ( 'course_number' => 3, 'course_name' => 'Ethics', 'course_date' => '2015-03-02', 'instructor_name' => 'Aaron' ), 
    3 => Array ( 'course_number' => 4, 'course_name' => 'Vocabulary', 'course_date' => '2015-03-02', 'instructor_name' => 'Aaron' ),
    4 => Array ( 'course_number' => 5, 'course_name' => 'Civilization', 'course_date' => '2015-03-09', 'instructor_name' => 'Aaron' ), 
    5 => Array ( 'course_number' => 6, 'course_name' => 'Statistics', 'course_date' => '2015-03-09', 'instructor_name' => 'Aaron' ),
    6 => Array ( 'course_number' => 7, 'course_name' => 'English', 'course_date' => '2015-03-09', 'instructor_name' => 'Aaron' ),
  )
);
$scripturl = '';
$user_info = array('id' => 1);

echo ' 
<caption><h1>Class Registration</h1></caption>
<form action="'.$scripturl.'?action=simsub_ENROL" method="POST" autocomplete="off">
<input type=hidden name="studentid" value="' . $user_info['id'] . '">  
<table border="1" cellspacing="2" cellpadding="5">
  <tr>';

$date = "";
$i = 1;

foreach ($simsub['classes'] as $record) {
  if($i == 1) $date = $record['course_date'];
  if(strtotime($date) !== strtotime($record['course_date'])) {
    echo '</tr><tr>';
  }
  echo '
    <td>
        ' . $record['course_date'] . '
    </td>               
    <td>
        ' . $record['course_number'] . ' - ' . $record['course_name'] . '<br />
        ' . $record['instructor_name'] . '<br />
      <input type="radio" name="class' . $i . '" value="' . $record['course_number'] . '" />
    </td>';
  $date = $record['course_date'];
  $i++;
}

echo '
  </tr>
</table>
<div>
  <input type="submit" class="button blue" value="Submit Registrations">
</div>
</form>';

The submit button is showing inside the same table field as Thai class information?

如果要在table中显示提交按钮,则必须将相应的colspan设置为按钮<td>,否则只需将其移出[=35] =].

PhpFiddle Demo