foreach只显示一个元素

时间:2015-01-07 03:16:20

标签: php html foreach

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

我有一个由查询填充的数组,如果我在该数组上执行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 ) )

我使用以下内容尝试在同一行的同一天生成一个包含任何类的表。

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. 当它输出时,我得到一个表格,显示2列,第一个日期值和泰语类的值,然后没有别的。看起来foreach循环永远不会回到第二个值。

  2. 提交按钮显示在与泰语类信息相同的表字段中?

1 个答案:

答案 0 :(得分:0)

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

  

我正在使用以下内容尝试在同一行的同一天生成一个包含任何类的表。

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

<?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>';
  

提交按钮显示在与泰语类信息相同的表字段中?

如果您希望表格中显示提交按钮,则必须将相应的colspan设置为按钮<td>,否则只需将其移出表格即可。

PhpFiddle Demo