PHP嵌套循环
我基本上是想扫描一堆评论中的非法词语,然后用一个干净的版本替换这些非法词语 我有两个数组,一个数组有所有要检查的注释,另一个数组有所有要查找的非法单词 第一个for循环获取注释,嵌套的for循环然后扫描注释中的每个非法单词并替换它们。但问题是,它实际上似乎不起作用。您能告诉我这是我的循环结构问题还是实际的更新逻辑问题吗PHP嵌套循环,php,mysql,for-loop,Php,Mysql,For Loop,我基本上是想扫描一堆评论中的非法词语,然后用一个干净的版本替换这些非法词语 我有两个数组,一个数组有所有要检查的注释,另一个数组有所有要查找的非法单词 第一个for循环获取注释,嵌套的for循环然后扫描注释中的每个非法单词并替换它们。但问题是,它实际上似乎不起作用。您能告诉我这是我的循环结构问题还是实际的更新逻辑问题吗 $numComments = count($commentsToCheck); $numIllegalWords = count($illegalWords);
$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中的内容,以检查它是否确实有任何输入。从那里开始,回过头来,如果没有任何输入,请查看它是否出错。我看不出代码中有任何错误,但您可能希望在输入通过循环之前和之后检查输入,因此如果它更改了任何内容。