Phalcon - loop通过结果和改变值


phalcon - loop through results and change values

我想循环遍历所有设置类别,并根据结果设置变量。这样我就可以将更新后的数组/对象传递给视图并循环遍历它。但是我得到这个错误:

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";
    }
}