array_intersect()参数不是数组

时间:2013-02-19 15:38:00

标签: php mysql

我已经开发了这个小代码来检查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";}

2 个答案:

答案 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);

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