PHP in_array不能正常工作

时间:2015-05-20 07:36:24

标签: php mysql

我从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."

2 个答案:

答案 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;  
        }
      }      
    }

坦克你要注意我的回答。