-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

さて、最初に 2 つの配列をループして値を変更していますが、この方法では、配列内の値ではなく、値の一時コピーを変更しているだけです。これを行うには、次のように&記号を使用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()(つまり、2 つの入力配列間の共通部分の配列)。echo()を使用して配列を直接印刷することはできません。試してみると、「Array」という単語が表示されます。最初に文字列に変換する必要があります。

//your incorrect code.
echo "Your common words are: $intersect";

//corrected code:
echo "Your common words are: ".implode(',',$intersect);

また、コーディング スタイルが非常に乱雑で読みにくいことにも注意してください。整理することを強くお勧めします。ある種のインデントと変数の命名規則に従います。そうしないと、維持するのが非常に難しくなります。

于 2013-02-19T15:52:06.167 に答える