我从mysql_query
列表数据库中获得select *
到'english'
,mysql_fetch_assoc
返回一个数组。如果找到'flick'
,我会尝试使用in_array()
搜索单词'flick'
(实际存在于数据库中),但不应显示,但会显示。我认为in_array
函数找不到单词'flick'
。请看下面的代码:
<?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."
答案 0 :(得分: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 :(得分:1)
在解决我的问题2天后,我找到了答案。
错误在于mysql_fetch_assoc
的查询输出中。实际上它会返回一个关联数组,但之后会为每个键添加一个空格(&#39;&#39;)。
因此,结果与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;
}
}
}
坦克你要注意我的回答。