2015-05-20 4 views
0

У меня есть mysql_query до select * из базы данных списка 'english' и mysql_fetch_assoc возвращает массив. Я пытаюсь найти слово 'flick' (которое фактически существует в базе данных), используя in_array(), если найдено 'flick', его не следует показывать, но он отображается. Я думаю, in_array функция не находит слово 'flick'. Пожалуйста, посмотрите на код ниже:PHP in_array не работает true

<?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_ *' и, как ни странно, ответ тот же. Это означает, что нет никакого почтения между mysl и mysqli в моем localhost xampp. – 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)) { 

и на нижнем конце, если заявление

+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

Я забыл сказать, что моя база данных создана с помощью простого английского списка слов. После замены его на список формата '.csv', импортировав его в мою базу данных и используя' while (($ words_row = mysql_fetch_assoc ($ words))) { if ((in_array ($ word, $ words_row) == false)) {'Моя брошь решена. – Majid

Смежные вопросы