2015-05-20 167 views
0

我有一個mysql_queryselect *'english'列表數據庫和mysql_fetch_assoc返回一個數組。如果找到'flick',我嘗試使用in_array()來搜索單詞'flick'(實際存在於數據庫中),但不應顯示它,但會顯示它。我認爲in_array函數找不到單詞'flick'。請看下面的代碼:PHP in_array不能正常工作

<?php 
error_reporting(E_ALL); 
require 'db.php'; 

function spellcheck($word) 
{ 
$output = array(); 
$word = mysql_real_escape_string($word); 

$words = mysql_query("SELECT `word` FROM `english` WHERE LEFT(`word`, 1) = '" . 
substr($word, 0, 1) . "'"); 

while(($words_row = mysql_fetch_assoc($words)) && (in_array($word, $words_row)==false)) 
    { 
    similar_text($word, $words_row['word'], $percent); 
    if($percent > 82) 
    { 
     $output[] = $words_row['word']; 
    } 
    } 

    return (empty($output)) ? false : $output; 
} 

    if (isset($_GET['word']) && trim($_GET['word']) != null) 
    { 
    $word = $_GET['word']; 
    $spellcheck = spellcheck($word); 

    if ($spellcheck !== false) 
    { 
     echo '<pre>' . print_r($spellcheck, true) . '</pre>'; 
    } else { 
     echo '<p>' . $word . ' spelled correctly, or no suggestions founds.</p>'; 
    } 
    } 
?> 
<form action="" method="GET"> 
Check single word spelling: 
<input type="text" name="word" /> 
<input type="submit" value="Check" /> 
</form> 

代碼返回:

Array (
    [0] => flick 
    [1] => flicks 
) 

但它應該是:

"spelled correctly, or no suggestions founds." 
+3

不要再使用'mysql_ *'函數了。他們已經棄用了很長時間,並在接下來的幾個月裏最終被PHP7刪除。改用PDO或mysql ** i **。 – TiMESPLiNTER

+0

謝謝。你相信'mysql_ *'是錯誤答案的原因嗎? – Majid

+0

親愛的@deceze,我測試'mysqli_ *',並且答案是相同的。這意味着我的本地主機xampp中mysl和mysqli之間沒有差別。 – Majid

回答

2

替換該行

while(($words_row = mysql_fetch_assoc($words)) && (in_array($word, $words_row)==false)) 

while(($words_row = mysql_fetch_assoc($words))) { 
    if((in_array($word, $words_row)==false)) { 

,並在底部接近if語句

+1

感謝您的回答。但我之前嘗試過,並沒有奏效。因爲我相信你提供的代碼和我的代碼之間沒有區別。 – Majid

1

工作在我的問題2天后我找到了答案。 錯誤在mysql_fetch_assoc的查詢輸出中。實際上,它返回一個關聯數組,但每個關鍵字之後都會添加一個空格('')。 所以,結果不像abcdefg。結果就像a b c d e f g。這意味着當我在關聯數組中搜索一個特殊字時,in_array()函數返回false。因爲例如'flick'字不等於'flick ',並且陣列中的鍵之後有一個空格。我用trim()功能,解決了我的問題:

while ($rows = mysql_fetch_assoc($query)) 
    { 
    foreach($rows as $key) 
    { 
     $key = trim($key); 
     $array[] = $key; 
    } 
    } 
    if (in_array($word, $array)) 
    { 
     echo "The word is spelled correctly"; 
    } else { 
     foreach($array as $key) 
     { 
     similar_text($word, $key, $percent); 
     if ($percent > 82) 
     { 
      $output[] = $key; 
     } 
     }  
    } 

坦克您關注我的答案。

+0

我忘記說我的數據庫是通過使用簡單的英文單詞列表創建的。通過導入到我的數據庫並使用'while(($ words_row = mysql_fetch_assoc($ words)))if((in_array($ word,$ words_row)== false))將其替換爲'.csv'格式列表後, {'我的問題解決了。 – Majid