Мне нужно проверить, присутствует ли массив слов ($ words) в большем массиве ($ dictionary).
Если все слова есть, ошибок нет.
Если один или несколько из них не включены в $ словарь, я хочу отправить сообщение об ошибке.
До сих пор я придумал это:
<?php
// first I select a column from a MySQL table and retrieve
//all the words contained in that field.
$spell = "SELECT * FROM eventi WHERE utente='{$_SESSION['username']}'";
$qspell = mysql_query($spell) or die ("Error Query [".$spell."]");
while ($risu = mysql_fetch_array($qspell)){
$risu = mysql_fetch_array($qspell);
// the following lines remove parentheses, digits and multiple spaces
$desc = strtolower($risu["descrizione"]);
$words = explode(" ",$desc);
$words = str_replace("(","",$words);
$words = str_replace(")","",$words);
$words = preg_replace('/[0-9]+/','',$words);
$words = preg_replace('/\s+/',' ',$words);
// the array $dictionary is generated taking a long list
//of words from a txt file
$dictionary = file('./docs/dizionario.txt',FILE_IGNORE_NEW_LINES);
foreach($words as $k => $v){
if (in_array($v, $dictionary)){
//Do something?
} else {
$error = "error";
echo "The word ".$v." can't be found in the dictionary.";
}
}
}
if (!isset($error)){
echo "All the words are in the dictionary.";
} else {
echo "There are some unknown words. See above.";
}
?>
Этот код всегда возвращает одно сообщение об ошибке, не сообщая, какое слово не может быть найдено.
Кроме того, слова, которые фактически отсутствуют, не обнаруживаются.
Что я делаю неправильно?
Видимо, проблема заключается в строке:
$words = preg_replace('/[0-9]+/','',$words);
Удаление цифр каким-то образом портит всю процедуру сопоставления.
Без удаления цифр мой код работает.
Других решений пока нет …