为什么只有第一个操作在我的循环中运行--除了最后一个重复的操作?

时间:2014-05-13 作者:Linda H

我们有一个自定义的walker,它只显示当前顶部菜单的子菜单,在对其进行一些更改时,我遇到了一些我没有得到的东西-出于某种原因,只有第二个foreach循环中每个循环的第一个回显会实际回显,而下面的回显只会在最后一个循环上回显。为什么会这样?

代码如下:

    $top_level_elements = array();
    $children_elements  = array();
    foreach ( $elements as $e) {
        if ( 0 == $e->$parent_field )
            $top_level_elements[] = $e;
        else
            $children_elements[ $e->$parent_field ][] = $e;
    }

    foreach ( $top_level_elements as $e )
        echo \'One thing<br>\'; // Note 1
        echo \'Another thing<br>\'; // Note 2
        echo \'$e->ID: \' . $e->ID . \'<br>\'; // Note 3
        if ( $e->current || $e->current_item_ancestor || $e->current_item_parent ) {
            $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output );
        }

        return $output;
    }
注1-3显示了我的测试值。回声如下:

One thing
One thing
One thing
One thing
One thing
One thing
One thing
One thing
Another thing
$e->ID: 873
如果删除注释1-2,我将获得以下内容,即顶部菜单项的所有ID。

$e->ID: 7
$e->ID: 909
$e->ID: 42
$e->ID: 1326
$e->ID: 871
$e->ID: 872
$e->ID: 1383
$e->ID: 873
这就好像循环中的任何语句都会使其后的每一条语句无效,但最后一次重复时的语句除外。这不仅适用于echos,而且对于任何操作,使用echos显示都更容易。

这也意味着,如果我回显上述测试变量,那么当脚本到达if语句时,菜单将不会显示为变量$e->current 等等,似乎已经空了。

虽然我现在可以绕过这一点,因为我真的不需要在这里回显内容,但我真的想知道为什么会这样-因为这意味着我不能在if语句之前在循环中执行任何操作,否则在大多数情况下它不会运行if语句。

1 个回复
最合适的回答,由SO网友:тнє Sufi 整理而成

看来你错过了{ 对于foreach

更改此行:

foreach ( $top_level_elements as $e )

foreach ( $top_level_elements as $e ) {
不要忘记在循环结束后完成花括号。

结束