在php对象数组中设置对象-循环后不保留更改数据的对象

在php对象数组中设置对象-循环后不保留更改数据的对象,php,arrays,object,Php,Arrays,Object,我有一个类别的对象数组,在每个类别中我都有一个相同类型的子类别列表。 项目A->项目A 1、项目A 2等。 B项。。。 当我遍历并匹配子cat时,设置更改时不会保存数据。代码看起来不错,有什么想法吗 foreach ($cats as $cat) { if($cat->getId() == $catChanged->getCategory_id()) { foreach ($cat->getSubC

我有一个类别的对象数组,在每个类别中我都有一个相同类型的子类别列表。 项目A->项目A 1、项目A 2等。 B项。。。 当我遍历并匹配子cat时,设置更改时不会保存数据。代码看起来不错,有什么想法吗

            foreach ($cats as $cat) {
            if($cat->getId() == $catChanged->getCategory_id()) {
                foreach ($cat->getSubCats() as $sc) {
                    if($sc->getId() == $id) {                           
                        var_dump($sc, $key);
                        $sc = $catChanged;                          
                        var_dump($sc, $key);    
                    }
                }               
            }   
        }   
        var_dump(serialize($cats));
正如您所看到的,var_dumps已被用于显示之前和之后,但是末尾的$cats在应该更改的时候未更改

修复

最后,我从数组中删除了该元素,并将编辑过的对象插入到相同的位置。很好,谢谢你的回复

        foreach ($cats as $cat) {
            if($cat->getId() == $catChanged->getCategory_id()) {
                $i = -1;
                foreach ($cat->getSubCats() as $sc) {
                    $i++;
                    if($sc->getId() == $id) {                           
                        $tmp = AdminUtils::removeItem($cat->getSubCats(), $i);  //remove item
                        $cat->setSubCats(AdminUtils::insertArrayIndex($tmp, $catChanged, $i)); //re-insert at index
                        break(2); 
                    }
                }               
            }   
        }

这是一个众所周知的PHP问题。不能通过更改枚举器来更改数组对象的值。您需要更改代码,以便此行-
$sc=$catChanged-对实际数组对象进行操作。它看起来像
$cats[$catnum]->getSubCats()[$subcatnum]=$catChanged


您可以通过使用整数迭代数组和子数组来实现这一点,也可以使用现有方法,但在遍历数组时增加位置整数。前者更优雅,但后者也有效。

试试这个。您需要重新引用$cat对象

foreach ($cat->getSubCats() as $sc) 
{
    if($sc->getId() == $id) 
    {                           
        var_dump($sc, $key);
         $cat->resetSubCat($id, $catChanged); 
    ]
}   

编辑:我刚刚重读了你的修复。您应该将数组逻辑放入$cat对象中

$sc
只是一个局部变量。分配给它不会改变你原来的数组。它是一个数组,所以我认为你应该使用for循环,并通过$cats[$i]=$catChangedHi来改变cat。谢谢你的帮助,给了我一些解决方案的想法。看来您只能进入一个级别。保持它的独立允许逻辑与任何数组一起使用,无论如何,谢谢