2013-02-19 57 views
-2

我已經開發了這個小代碼來檢查2個文本,一個來自數據庫,另一個來自外部輸入具有常用詞。 問題是我收到一條消息「參數不是數組」。 我看不出問題在哪裏。 我還需要檢查2條消息是否應該有相同的單詞是在相同的序列。 請幫忙瞭解錯誤在哪裏。 謝謝array_intersect()參數不是數組

$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";} 
+6

$ neword和$ currentword只是字符串。你根本不是相交的數組。所以...很大的驚喜...... PHP告訴你這一點。 – 2013-02-19 15:39:57

+1

我希望你知道什麼是陣列。 – vikingmaster 2013-02-19 15:40:47

回答

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"; 
    }  
} 
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); 

我還要指出,您的編碼風格是非常凌亂和難以閱讀。我強烈建議您嘗試整理它;遵循某種縮進和變量命名規則。否則,它將很難保持。

+0

我做了修改建議,但出來說:「你的常見詞是:陣列」。非常類似的解決方案,我以前。 – ciccio 2013-02-19 16:29:36

+0

@ user2087642 - 你的建議是正確的;我做了一個編輯,向您展示您仍然存在的問題。但是,這些問題表明,您對PHP沒有深入的瞭解或數組是如何工作的。我建議花點時間在嘗試使用它們之前瞭解這些工作是如何工作的。 – SDC 2013-02-19 17:00:23

相關問題