如何在2例后跳出一个循环?

时间:2012-06-17 00:26:12

标签: php foreach

我想要修改的函数中有一个循环:

foreach ( $form_fields as $key => $val ) {
        if ( 'menu_order' == $key ) {
            if ( $gallery )
                $order = "<div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[$attachment_id][menu_order]' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ). "' /></div>";
            else
                $order = "<input type='hidden' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ) . "' />";

            unset( $form_fields['menu_order'] );
            break;
        }
    }

这个循环遍历$ form_fields数组。如果“menu_order”是关键,那么,做一些事情并打破。现在我想再添加一个键来执行上述操作。所以,我把它修改如下:

foreach ( $form_fields as $key => $val ) {
    if ( 'menu_order' == $key ) {
        if ( $gallery )
            $order = "<div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[$attachment_id][menu_order]' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ). "' /></div>";
        else
            $order = "<input type='hidden' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ) . "' />";

        unset( $form_fields['menu_order'] );

    }

    if ( 'post_status' == $key ) {
    if ( $gallery )
        $status = "<div class='post_status'> <input class='post_status_input' type='text' id='attachments[$attachment_id][post_status]' name='attachments[$attachment_id][post_status]' value='" . esc_attr( $val['value'] ). "' /></div>";
    else
        $status = "<input type='hidden' name='attachments[$attachment_id][post_status]' value='" . esc_attr( $val['value'] ) . "' />";

    unset( $form_fields['post_status'] );
    break;
}

}

请注意,我删除了原始代码中的中断,在循环结束时添加了中断。我认为这应该使循环继续,直到它完成我新添加的块。 但是此代码不会按预期打印post_status输入框。我在哪里出错了?

2 个答案:

答案 0 :(得分:2)

这是一个简单的修复:摆脱循环。由于您知道密钥,因此您不需要它,只需执行此操作即可直接访问数组元素:

if ( $gallery )
    $order = "<div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[$attachment_id][menu_order]' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $form_fields['menu_order']['value'] ). "' /></div>";
else
    $order = "<input type='hidden' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $form_fields['menu_order']['value'] ) . "' />";

unset( $form_fields['menu_order']);

'post_status'字段执行相同的操作。

答案 1 :(得分:1)

看起来你想在找到$order$status后打破循环。如果是这样,您希望在两种情况之后都有一个额外的if语句来检查并确保$order$status都已设置,并且只有在这种情况下才会中断。

类似的东西:

if (isset($order) && isset($status)) {
    break;
}

也就是说,检查功能。它可能只检查$order的值,并忽略$status的值。