PHP-在嵌套的foreach循环中取消设置对象
所以长话短说-在第一个foreach中尝试取消设置$this->models[$modelKey]时,取消设置工作正常,$this->models[$modelKey]->equipmentList->equipment[$eqKey]指向正确的对象,但在嵌套的foreach中取消设置不起作用。有什么想法吗?提前谢谢你的帮助PHP-在嵌套的foreach循环中取消设置对象,php,arrays,oop,foreach,unset,Php,Arrays,Oop,Foreach,Unset,所以长话短说-在第一个foreach中尝试取消设置$this->models[$modelKey]时,取消设置工作正常,$this->models[$modelKey]->equipmentList->equipment[$eqKey]指向正确的对象,但在嵌套的foreach中取消设置不起作用。有什么想法吗?提前谢谢你的帮助 public function processModelsEquipmentList() { foreach ($this->models as $model
public function processModelsEquipmentList() {
foreach ($this->models as $modelKey => $model) {
if (!strstr('#', $model->id)) {
foreach ($model->equipmentList->equipment as $eqKey => $equipment) {
if (in_array($equipment->code, $this->specialVersionsCodes)) {
$newModel = clone $model;
$newModel->name.= ' ' . $equipment->name;
$newModel->id.= '#' . $equipment->id;
if (strlen($newModel->code) < 4) {
$newModel->code.=$equipment->code;
}
$newModel->order = $newModel->order + 1;
$newEquipmentList = new EquipmentList($newModel->id, true);
$newEquipmentList->add(clone $equipment);
$newModel->setNewEquipmentList($newEquipmentList);
$this->addModel($newModel);
//echo $this->models[$modelKey]->equipmentList->equipment[$eqKey]->name;die();
unset($this->models[$modelKey]->equipmentList->equipment[$eqKey]);
}
}
}
}
}
它不是通过$model而不是$this->models访问的吗?同样的设备 试试这个:
unset($equipment[$eqKey]);
一些扩展:
foreach ($this->models as $modelKey => $model) {
//here you use $model to access $this->models[X]
foreach ($model->equipmentList->equipment as $eqKey => $equipment) {
//here you use $equipment to access $this->models[X]->equipmentList->equipment[x]
}
}
编辑:
现在我得到了解决方案:
foreach ($this->models as $modelKey => $model) {
foreach ($model->equipmentList->equipment as $eqKey => $equipment) {
//use the $modelKey key and not the $eqKey
unset($model->equipmentList->equipment[$modelKey]);
}
}
如果我说得对,我会回答这个问题,但如果我错了,我会把这个问题转移到评论: 首先,克隆最后要取消设置的对象。为什么不在克隆后立即取消设置呢 其次,我认为该对象是通过设计通过引用传递给foreach循环的,因此不需要引用键 如果我是对的,这可能有用:
public function processModelsEquipmentList() {
foreach ($this->models as $modelKey => $model) {
if (!strstr('#', $model->id)) {
foreach ($model->equipmentList->equipment as $eqKey => $equipment) {
if (in_array($equipment->code, $this->specialVersionsCodes)) {
$newModel = clone $model;
unset($model); // <-- Unesetting after clone, using loop var name.
$newModel->name.= ' ' . $equipment->name;
$newModel->id.= '#' . $equipment->id;
if (strlen($newModel->code) < 4) {
$newModel->code.=$equipment->code;
}
$newModel->order = $newModel->order + 1;
$newEquipmentList = new EquipmentList($newModel->id, true);
$newEquipmentList->add(clone $equipment);
$newModel->setNewEquipmentList($newEquipmentList);
$this->addModel($newModel);
}
}
}
}
}
已尝试:未设置$设备;,取消设置$model->equipmentList->equipment[$eqKey];-这两种解决方案都不起作用$equipment是一个对象,因此$equipment[$eqKey]不准确。同时使用对这些对象的引用-在这样做时不会改变任何事情:foreach$model->equipmentList->equipment as$eqKey=>&$equipment,在foreach$this->models as$modelKey=>&$model上执行时内存不足。是否要取消设置对象或对象的属性?我正在尝试取消设置保存在数组中的对象。为了澄清:$this->models-Array,$model->equipmentList-object,$model->equipmentList->equipment-Array-of-objects您在第一条评论中写道您尝试取消设置$equipment;对象数组,但未取消设置$equipment[$eqKey];objectforeach$model->equipmentList->equipment作为$eqKey=>$equipment-$equipment是一个对象,$model->equipmentList->equipment是一个数组。我的名字不好P1。我想取消设置$equipment,而不是$model。2.关于参考资料的想法来自这里。他们说如果我想用这种方式解决问题,我需要使用它。3.在$newEquipmentList->addclone$equipment之后移动取消设置;没有改变任何事情。编辑:粘贴了错误的链接。现在它是正确的