Foreach循环没有做它看起来应该的样子 - 或者它可能是在被调用的函数中? PHP
我有一个相当简单的功能,从用户的输入或发送框中删除私人消息:
public function delete($messageID) {
$type = $this->findType($messageID);
if ($type == 'in') {
foreach ($this->inArr as $key => $value) {
if ($this->inArr[$key]->messageID != $messageID)
$implodeData[$key] = $this->inArr[$key]->messageID;
}
if (!isset($implodeData))
$imploded = '0';
else
$imploded = implode(',', $implodeData);
$result = $this->_database->updatePMUser('inArr', $imploded, 'UID', $this->UID);
$result2 = $this->_database->deletePM('messageID', $messageID);
return;
}
else {
foreach ($this->sentArr as $key => $value) {
if ($this->sentArr[$key]->messageID != $messageID)
$implodeData[$key] = $this->sentArr[$key]->messageID;
}
if (!isset($implodeData))
$imploded = '0';
else
$imploded = implode(',', $implodeData);
$result = $this->_database->updatePMUser('sentArr', $imploded, 'UID', $this->UID);
$result2 = $this->_database->deletePM('messageID', $messageID);
return;
}
}
我意识到我可以通过处理类型变量将这个代码减少一半,我将会这样做,但这不是目前关注的问题。我的问题是,当一个视图消息页面底部的删除函数只调用一次这个函数时,这个函数运行得非常好,但是当它被一个foreach循环连续多次调用时,它直接从in或者删除“checked”消息发送盒子 - 它做了一些奇怪的事情。如果我一次检查一条消息并删除,则没有问题 - 如果我检查两个或更多,它完全适用于它删除的第一条消息,在后续消息上它只删除实际消息(对deletePM的调用)但它不会从用户的数据库行中删除messageID值(这是整个第一部分所做的,这是对updatePMUser的调用)。
起初我认为这是一个缓存问题,但我已经解决了这个问题但仍然没有。它应该以与复选框删除在不同类中的foreach循环上工作完全相同的方式执行所有操作 - 所有输入都相同,它只是一个接一个地调用几次,完全返回,然后循环。这是调用方法的代码:
private function _processSelectedSent() {
$pmObj = unserialize(base64_decode($_POST['pmObj']));
$i=1;
foreach ($_POST as $key => $value) {
if ($value == 'marked') {
$checkedArray[$i] = $key;
$i++;
}
}
if ($_POST['submitter'] == 'Delete Selected') {
if (is_array($checkedArray)) {
foreach ($checkedArray as $key => $value)
$pmObj->delete($value);
}
else
$pmObj->delete($checkedArray[1]);
header("Location: ".HOME_PAGE.PM_PAGE."?view=sentbox&nocache=".time());
}
}
其中一个用于发送箱处理,另一个用于收件箱处理,两者在功能上与我们的意图和目的相同。哦,我已经var_dumped了checkedArray的值等等,它们都很好,所以循环应该得到适当的输入。谁能看到打嗝的位置?谢谢。
没有找到相关结果
已邀请:
1 个回复
呢率篓舍烫