我想循环遍历所有设置类别,并根据结果设置变量。这样我就可以将更新后的数组/对象传递给视图并循环遍历它。但是我得到这个错误:
Fatal error: An iterator cannot be used with foreach by reference in /app/controllers/SettingsController.php on line 9
我代码:<?php
class SettingsController extends ControllerBase
{
public function indexAction()
{
$this->tag->prependTitle("settings");
$settingCategories = SettingCategory::find();
$this->view->setVar("settingCategories",$settingCategories);
foreach($settingCategories as &$settingCaterogy){
if($settingCaterogy->type == "2"){
$settingCategory->intersection = "deze mag niet";
}else{
$settingCategory->intersection = "deze mag";
}
}
$this->view->disable();
var_dump($settingCategories);
}
}
当我删除&时,键不会被定义或编辑
我假设您的设置类别是一个对象,这意味着它总是作为引用传递。在这种情况下,你不需要使用&在你的每一个语句中,你也不能,正如你所发现的。
foreach($settingCategories as $settingCaterogy){
// …
}
去掉&从你的循环迭代器:
foreach($settingCategories as &$settingCaterogy){
foreach($settingCategories as $settingCaterogy){
Bytchek和Teknotica提供的答案是正确的,并且会让你绕过错误。然而,据我所知,phalcon resultset对象是只读的,所以您设置的值不会固定。一个解决方法是将$settingCategories对象转换为一个常规数组,然后循环该数组(通过引用:
)。$rw = $settingCategories->toArray();
foreach($rw as &$settingCategory){
if($settingCaterogy["type"] == "2"){
$settingCategory["intersection"] = "deze mag niet";
} else {
$settingCategory->["intersection"] = "deze mag";
}
}