PHP嵌套循环

PHP嵌套循环,php,mysql,for-loop,Php,Mysql,For Loop,我基本上是想扫描一堆评论中的非法词语,然后用一个干净的版本替换这些非法词语 我有两个数组,一个数组有所有要检查的注释,另一个数组有所有要查找的非法单词 第一个for循环获取注释,嵌套的for循环然后扫描注释中的每个非法单词并替换它们。但问题是,它实际上似乎不起作用。您能告诉我这是我的循环结构问题还是实际的更新逻辑问题吗 $numComments = count($commentsToCheck); $numIllegalWords = count($illegalWords);

我基本上是想扫描一堆评论中的非法词语,然后用一个干净的版本替换这些非法词语

我有两个数组,一个数组有所有要检查的注释,另一个数组有所有要查找的非法单词

第一个for循环获取注释,嵌套的for循环然后扫描注释中的每个非法单词并替换它们。但问题是,它实际上似乎不起作用。您能告诉我这是我的循环结构问题还是实际的更新逻辑问题吗

    $numComments = count($commentsToCheck);
    $numIllegalWords = count($illegalWords);
    for($i = 0; $i <= $numComments; $i++)
    {
        $message = $commentsToCheck[$i]['message'];
        $commentId = $commentsToCheck[$i]['id'];
        //error_log($message.'-'.$commentId);

        for($j = 0; $j <= $numIllegalWords; $j++)
        {
            //Get word to replace with
            $word = $illegalWords[$j]['word'];
            //error_log($word);

            $length = strlen($word);
            $first = substr($word,0);
            $last = substr($word,-1);
            $starLength = $length - 2;
            $replacement = $first.str_repeat('*',$starLength).$last;

            $newMessage = preg_replace('/\b'.$word.'\b/i', $replacement, $message);

            //Update the comment
            $sql = "UPDATE ow_base_comment SET message = $newMessage WHERE id = $commentId LIMIT 1";
            OW::getDbo()->query($sql);
        }
    }
$numComments=count($commentsToCheck);
$numIllegalWords=计数($illegalWords);

对于($i=0;$i您的查询不应该是我放在下面的,因为它现在看不到查询中的实际变量。它在技术上只会不更新任何内容,因为没有实际的变量集

  $sql = "UPDATE ow_base_comment SET message = '".$newMessage."' WHERE id = '".$commentId."' LIMIT 1";

忘记PHP中的引号是一个常见错误。

我不得不说,我无法发现您的代码有任何问题。您是否为PHP使用了调试器?它们真的很有帮助。当您说它不起作用时,您得到的是什么输出以及在哪个阶段?它似乎没有用新的注释(已清理的版本)更新数据库。因此,我不确定我的循环或preg_替换是否有问题,但基于在线检查,我非常确定这也没问题。您应该向我们提供有关您获得的输出的更多信息。此外,对于嵌套循环,我建议您使用foreach,但是现在解决此代码并不要建议其他选项非常重要。请尝试单引号您的查询中的“$newMessage”我已经尝试了两种方法,但两种方法都没有更新表。您可能希望回显&newNessage变量和$commentId中的内容,以检查它是否确实有任何输入。从那里开始,回过头来,如果没有任何输入,请查看它是否出错。我看不出代码中有任何错误,但您可能希望在输入通过循环之前和之后检查输入,因此如果它更改了任何内容。