我们有一个自定义的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语句。