Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Foreach循环没有做它看起来应该做的事情——或者它在被调用的函数中?PHP_Php_Loops_Foreach - Fatal编程技术网

Foreach循环没有做它看起来应该做的事情——或者它在被调用的函数中?PHP

Foreach循环没有做它看起来应该做的事情——或者它在被调用的函数中?PHP,php,loops,foreach,Php,Loops,Foreach,我有一个相当简单的函数,可以从用户的“输入”或“发送”框中删除私人消息: public function delete($messageID) { $type = $this->findType($messageID); if ($type == 'in') { foreach ($this->inArr as $key => $value) { if ($this->inArr[$key]->messageI

我有一个相当简单的函数,可以从用户的“输入”或“发送”框中删除私人消息:

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;
        }
    }
我意识到,通过去掉类型变量,我可以将这段代码减少一半,我将这样做,但这不是目前需要考虑的问题。我的问题是,当查看消息页面底部的delete函数只调用一次时,该函数工作得非常出色,但当foreach循环连续多次调用它时,该循环直接从in或sent框中删除选中的消息,它会做一些奇怪的事情。如果我一次检查一条消息并将其删除,则不会出现问题-如果我检查两条或更多条消息,它将在删除的第一条消息上完全工作,在后续消息上,它只删除调用deletePM时的实际消息,但不会从用户的数据库行中删除messageID值,这是整个第一部分所做的,这是对UpdateMuser的调用

起初我认为这是一个缓存问题,但我已经解决了这个问题,仍然无法解决。它应该以完全相同的方式处理不同类中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());
        }
    }

其中一个用于sentbox处理,另一个用于收件箱处理,就我们的意图和目的而言,两者在功能上完全相同。哦,我已经把checkedArray等的值都转储了,它们都很好,所以循环应该得到正确的输入。有人能看到打嗝的地方吗?谢谢。

没关系,我想出来了。很简单,,我只需要从数组中删除与我从数据库中删除的值相同的值—它总是在同一个对象上工作,因此变量永远不会更改,并且每次后续调用都会再次将以前删除的消息视为有效消息。

是否在返回前查询的函数中释放数据库结果价值?发布我的结果是什么意思?你是说mysql的免费结果吗?如果是这样,这将如何解决这个问题?谢谢。事实上,我的意思是把close函数称为我的坏函数,因为在准备好的语句上说free,假设你正在使用它们。。。不这样做会阻止您执行另一个查询。。。