我们可以在switch语句中使用goto语句吗?在php

时间:2015-08-14 11:33:36

标签: php switch-statement fatal-error break goto

我是php新手,编码是老派

<?php
  for($i=-2; $i<count($s2)-1;$i++){ ?>
  <tr>
    <td>
    <?php
    switch ($i) {
       case '-2':       
        echo "JR KG";  
        goto a;        
        break;

        case '-1':
        echo "SR KG";
        break;

        case '0':
        echo "Nursery";
        break;

        default:
        echo $i;
    ?>
    </td>
    <?php foreach($a2 as $aaa){  a: ?>
    <td>
        <input type="checkbox" name="<?php echo $aaa.'['.$i.']'; ?>" >
    </td>
    <?php
       }
    ?>                              
</tr>
<?php
   }
}
?>

通过上面的代码我想显示标准列表并显示每个分区的复选框(a-h)。打印标准后我想像复选框一样显示网格。这适用于i = 1到12 ..由于break();

,因为-2,-1,0失败

所以我尝试添加goto a;但得到以下错误

致命错误:“goto”进入循环或切换语句

如何获取前三个字段的每个部门的复选框的任何建议。

循环“i”我开始显示标准的行,并且循环“foreach($ a2)”我想在$ a2中附加foreach divison的复选框数...想创建像一个网格。由于break()

,它未能在前3行附加复选框

感谢。

2 个答案:

答案 0 :(得分:1)

您可以在Switch语句中使用goto。

但是,您不能跳转到foreach循环内的标签,因为foreach变量尚未实例化。在您的代码中,如果要跳转到foreach循环内的标签,则不会定义$ aaa变量。 foreach指针从未初始化。

如果PHP允许跳入foreach语句,则代码几乎总是会产生不可预测的结果。

答案 1 :(得分:0)

我仍然不确定我理解。

但如果你想在三个特殊情况下做一些不同的事情,试试这个一般的想法。

<?php
function add_checkboxes($i, $a2) {
    // do the checkbox processing in here
    if ( $i == -2 ) {
        foreach($a2 as $aaa){  a: ?>
           echo '<td>';
           echo  '<input type="checkbox" name="' . $aaa . '['.$i.'] .'" >';
           echo '</td>';
        }
    }
}


for($i=-2; $i<count($s2)-1;$i++){ 
?>
  <tr>
    <td>
<?php
    switch ($i) {
        case '-2':       
            echo "JR KG";  
            add_checkboxes($i, $a2);
            break;

        case '-1':
            echo "SR KG";
            add_checkboxes($i, $a2);
            break;

        case '0':
        echo "Nursery";
            add_checkboxes($i, $a2);
            break;

        default:
            echo $i;
?>
    </td>
</tr>
<?php
   }
}
?>