-2

我开发了这个小代码来检查 2 个文本是否有共同词,一个来自数据库,另一个来自外部输入。问题是我收到一条消息“参数不是数组”。我看不出问题出在哪里。我还需要检查 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";}
4

2 回答 2

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";
     }      
}
于 2013-02-19T15:51:32.903 回答
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);

我还要注意,您的编码风格非常混乱且难以阅读。我强烈建议尝试整理一下;遵循某种缩进和变量命名规则。否则将很难维护。

于 2013-02-19T15:52:06.167 回答