我已经开发了这个小代码来检查2个文本,一个来自数据库,另一个来自外部输入是否有共同的单词。 问题是我收到一条消息“Argument is not a array”。 我看不出问题出在哪里。 我还需要检查2条消息是否应该具有相同的单词是否在同一序列中。 请帮忙了解哪里出错了。 感谢
$checkMsg=strip_tags($_POST['checkMsg']); // message from input form
$message // message from database
$MsgWords = preg_split("/[\s,]+/", $checkMsg);
if(!empty($checkMsg)){
foreach ($MsgWords as $Neword)
{ $Neword = trim($Neword);
echo " $Neword";
}
$word = preg_split("/[\s,]+/", $message);
foreach ($word as $currentWord)
{
$currentWord = trim($currentWord);
echo " $currentWord";
}
$intersect=array_intersect( $Neword ,
$currentWord);
echo" Your common words are: $intersect";}else{echo "No common words";}
答案 0 :(得分:0)
正如其他人所说,你在比较字符串而不是数组。你的代码应该是这样的(你可能需要稍微改变它只是一个例子)
$checkMsg=strip_tags($_POST['checkMsg']); // message from input form
$message // message from database
$MsgWords = preg_split("/[\s,]+/", $checkMsg);
if(!empty($checkMsg)){
$intersect=array_intersect($message,$MsgWords);
if (count($intersect)>1) {
//only show output if there are matches
echo "Words in common are:<br />";
foreach ($intersect as $Neword) {
$Neword = trim($Neword);
echo $Neword."<br />";
}
} else {
echo "There are no words in common";
}
}
答案 1 :(得分:0)
好的,首先你要循环遍历两个数组并更改值,但是你拥有它的方式,你只需更改值的临时副本,而不是数组中的值。为此,您需要使用&
中的foreach()
符号告诉它在循环中使用引用变量,如下所示:
foreach ($MsgWords as &$Neword) { //added the & sign here.
$Neword = trim($Neword);
}
对其他foreach()
循环执行相同的操作。
其次,您的array_intersect()
调用正在查看单个字符串,而不是整个数组。你需要它来查看数组:
//your incorrect version:
$intersect=array_intersect( $Neword, $currentWord);
//corrected version, using your variable names.
$intersect=array_intersect( $MsgWords, $word);
这应该可以解决你的问题。
[编辑]
另外,请注意array_intersect()
输出一个数组(即两个输入数组之间的交集数组)。您不能使用echo()
直接打印数组。如果您尝试,它将只显示“数组”一词。您需要先将其转换为字符串:
//your incorrect code.
echo "Your common words are: $intersect";
//corrected code:
echo "Your common words are: ".implode(',',$intersect);
我还要注意你的编码风格非常凌乱且难以阅读。我强烈建议你试着整理一下;遵循某种缩进和变量命名规则。否则将很难维护。