在php对象数组中设置对象-循环后不保留更改数据的对象
我有一个类别的对象数组,在每个类别中我都有一个相同类型的子类别列表。 项目A->项目A 1、项目A 2等。 B项。。。 当我遍历并匹配子cat时,设置更改时不会保存数据。代码看起来不错,有什么想法吗在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
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。谢谢你的帮助,给了我一些解决方案的想法。看来您只能进入一个级别。保持它的独立允许逻辑与任何数组一起使用,无论如何,谢谢