我想用similar_text()
和in_array()
在PHP中做一個簡單的拼寫檢查和建議程序。 我有一個文本文件dictionary.txt,它是英語中的大部分單詞。PHP的similar_text()和in_array()不工作,因爲它看起來應該是他們應該
首先,我將文本文件中的每個單詞放在一個新行中放入一個數組中。然後在用戶輸入和提交時,我檢查他們輸入的單詞是否在使用in_array()
的數組中。如果是,那麼他們拼寫正確。
如果不是,則我使用similar_text()
來查找數組中接近拼寫錯誤的單詞的單詞。
我遇到了兩個我一直無法解決的問題,我相信我根據PHP文檔正確使用了in_array()
和similar_text()
。
第一個問題是,當用戶鍵入並提交文本文件中的單詞並且也應該在數組中時,其他單詞會引發並且不應該發生。由於它在文本文件中,因此它應該在數組中,並且in_array()
應計算爲true。
第二個問題是,我得到一個錯誤,我沒有定義通過similar_text()
存儲兩個單詞之間的相似百分比的變量。 我正在使用它,similar_text()
,就像在文檔註釋示例中一樣;實際上,我在每次比較前重置並重新定義$percentageSimilarity
。爲什麼我會收到未定義的錯誤?
這裏是我的代碼:
<?php
function addTo($line){
return $line;
}
$words = array_map('addTo', file('dictionary.txt'));
if(isset($_GET['checkSpelling'])){
$input = (string)$_GET['checkSpelling'];
$suggestions = array();
if(in_array($input, $words)){
echo "you spelled the word right!";
}
else{
foreach($words as $word){
$percentageSimilarity=0.0;
similar_text($input, $word, $percentageSimilarity);
if($percentageSimilarity>=95){
array_push($suggestions, $word);
}
}
echo "Looks like you spelled that wrong. Here are some suggestions: \n";
foreach($suggestions as $suggestion){
echo $suggestion;
}
}
}
?>
<!Doctype HTMl>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Spell Check</title>
</head>
<body>
<form method="get">
<input type="text" name="checkSpelling" autocomplete="off" autofocus />
</form>
</body>
</html>
不知道這是不是問題,但你應該強制所有的詞都是上限或下限,並確保你的單詞列表得到同樣的待遇。您也應該從兩個列表中刪除所有標點符號和非單詞字符。 – Orangepill
您不會將'FILE_IGNORE_NEW_LINES'標誌添加到'file()'。 –
@Orangepill手動刪除dictionary.txt中的所有標點符號。爲什麼我會強迫所有上層? dictionary.txt中的單詞都不是大寫。有些,也許15%都是小寫字母。 –