我有一个类别的对象数组,每一个我都有一个相同类型的子类别列表,即。 项目A - > itemA 1,itemA 2等 项目B ...... 当我遍历并匹配子猫时,设置更改时不会保存数据。代码看起来很好,有什么想法吗?
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已被用于显示之前和之后的结果但最终的$ cat应该是未更改的吗?
的 的 __ _ __ _ __ _ _ FIX 的 _ __ _ __ _ __
最后,我从数组中删除了该元素,并将编辑后的对象插入到相同的位置。工作正常,感谢您的回复。
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);
}
}
}
}
答案 0 :(得分:1)
这是一个已知的PHP陷阱。您无法通过更改enumator来更改数组对象的值。您需要更改代码,以便此行 - $sc = $catChanged;
- 对实际的数组对象进行操作。它看起来像$cats[$catnum]->getSubCats()[$subcatnum] = $catChanged;
。
您可以通过使用整数迭代数组和子数组来执行此操作,也可以使用现有方法,但在遍历数组时增加位置整数。前者更优雅,但后者也有效。
答案 1 :(得分:0)
试试这个。您需要返回$ cat对象。
foreach ($cat->getSubCats() as $sc)
{
if($sc->getId() == $id)
{
var_dump($sc, $key);
$cat->resetSubCat($id, $catChanged);
]
}
编辑:我只是重读你的修补程序。您应该将数组逻辑放入$ cat对象中。