Php 我们如何迭代实现迭代器的对象

Php 我们如何迭代实现迭代器的对象,php,zend-framework,Php,Zend Framework,Iam渲染菜单(使用Zend framework)(Zend_导航) 如果页面的值为“myPage”,我要做的就是将页面作为标签 然后,iam按预期设置页面的新URI $it = new RecursiveIteratorIterator( $container, RecursiveIteratorIterator::SELF_FIRST); foreach ($it as &$page) { $label = $page->label; if($label = "

Iam渲染菜单(使用Zend framework)(Zend_导航)

如果页面的值为“myPage”,我要做的就是将页面作为标签 然后,iam按预期设置页面的新URI

$it = new RecursiveIteratorIterator(
$container, RecursiveIteratorIterator::SELF_FIRST);

 foreach ($it as &$page) {
   $label = $page->label;
   if($label = "MyPage"){
    $newuri = "mypage.php?stcode=".$stcode."&cde=".$cde;            
    $page->setUri($newuri);
}           
}

在上面的陈述中,我得到了一个错误 “迭代器不能通过引用与foreach一起使用”。 我想使用reference,以便根据标签将页面指向新的uri


现在,我的问题和菜单中的所有菜单项都得到了相同的URI。

没有&,它能工作吗?在PHP中,默认情况下对象是通过引用传递的,因此调用setUri(理论上)应该修改原始对象。还请注意,if语句正在执行赋值($label=“MyPage”)而不是比较($label==“MyPage”)

假设$container是您的Zend导航对象,该组件有一些方法可以简化此操作,因此您应该能够将代码简化为:

$page = $container->findByLabel('MyPage');
$page->setUri("mypage.php?stcode=".$stcode."&cde=".$cde);

有关更多示例,请参阅。

如果没有&,它可以工作吗?在PHP中,默认情况下对象是通过引用传递的,因此调用setUri(理论上)应该修改原始对象。还请注意,if语句正在执行赋值($label=“MyPage”)而不是比较($label==“MyPage”)

假设$container是您的Zend导航对象,该组件有一些方法可以简化此操作,因此您应该能够将代码简化为:

$page = $container->findByLabel('MyPage');
$page->setUri("mypage.php?stcode=".$stcode."&cde=".$cde);
有关更多示例,请参见