Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX请求PHP只返回字符串中的第一个单词_Php_Ajax - Fatal编程技术网

AJAX请求PHP只返回字符串中的第一个单词

AJAX请求PHP只返回字符串中的第一个单词,php,ajax,Php,Ajax,我从W3学校找到了这段代码(不要评判我) 这段代码可以让你创建一个类似于谷歌使用AJAX的搜索字段 代码运行良好,但是在my.php中,字符串不止一个单词,只有在搜索第一个单词时,它才能正确输出。如果我尝试在输入字段的字符串中放入任何内容,它将不会输出。例如,我的字符串可能是: $a[]="This is string 1." $a[]="This is string 2." $a[]="Is this string 3?" $a[]="Is this string 4?" 问题是,如果我键

我从W3学校找到了这段代码(不要评判我)

这段代码可以让你创建一个类似于谷歌使用AJAX的搜索字段

代码运行良好,但是在my.php中,字符串不止一个单词,只有在搜索第一个单词时,它才能正确输出。如果我尝试在输入字段的字符串中放入任何内容,它将不会输出。例如,我的字符串可能是:

$a[]="This is string 1."
$a[]="This is string 2."
$a[]="Is this string 3?"
$a[]="Is this string 4?"
问题是,如果我键入“This”,它将只显示以此开头的结果。如果我输入‘string’,它会说没有结果。有什么想法吗?我确信问题出在PHP部分:

$q=$_REQUEST["q"]; $hint="";

if ($q !== "")
{ $q=strtolower($q); $len=strlen($q);
  foreach($a as $name)
    { if (stristr($q, substr($name,0,$len)))
      { if ($hint==="")
        { $hint=$name; }
        else
        { $hint .= "<br>$name"; }
      }
    }
}

// Output "no suggestion" if no hint were found
// or output the correct values 
echo $hint==="" ? "Refine search values" : $hint;
?>
$q=$\u请求[“q”]$提示=”;
如果($q!==“”)
{$q=strtolower($q);$len=strlen($q);
foreach($a作为$name)
{if(stristr($q,substr($name,0,$len)))
{if($hint==“”)
{$hint=$name;}
其他的
{$hint.=“
$name”;} } } } //如果未找到任何提示,则输出“无建议” //或输出正确的值 echo$hint===“”?“优化搜索值”:$hint; ?>
问题在于您的代码没有检查整个字符串。相反,您的函数(实际上是ww3schools)只查找数组中以相同字符开头的值

你想做的是自己做一个功能,可以做一个“关键字”搜索。我将让您自行决定如何使用此功能:

 if (strpos($str, $cont) !== FALSE)

strps检查
$str
的值是否为
$cont
,如果包含该单词,则返回true。

问题是您的代码没有检查整个字符串。相反,您的函数(实际上是ww3schools)只查找数组中以相同字符开头的值

你想做的是自己做一个功能,可以做一个“关键字”搜索。我将让您自行决定如何使用此功能:

 if (strpos($str, $cont) !== FALSE)

strps检查
$str
是否有值
$cont
,如果包含该单词,则返回true。

您应该再次阅读有关
stristr()
的文档,特别是参数的顺序:

string stristr(string $haystack , mixed $needle [, bool $before_needle = false ])
那你的台词呢

if (stristr($q, substr($name,0,$len)))
实际上应该是

if (stristr($name, $q))
由于不使用字符串return by
stristr()
,因此最好使用
stripos()


如果字符串应支持Unicode,请将
str*
函数替换为匹配的
mb_str*
函数。

您应再次阅读有关
stristr()
的文档,尤其是参数的顺序:

string stristr(string $haystack , mixed $needle [, bool $before_needle = false ])
那你的台词呢

if (stristr($q, substr($name,0,$len)))
实际上应该是

if (stristr($name, $q))
由于不使用字符串return by
stristr()
,因此最好使用
stripos()


如果字符串应支持Unicode,请将
str*
函数替换为其匹配的
mb_str*
函数。

此行导致出现问题

substr($name, 0, $len)
仅匹配字符串开头的[]的内容

你的代码应该是

if ($q !== "")
{ $q=strtolower($q); // not needed //$len=strlen($q);
  foreach($a as $name)
    { if (stristr($name, $q))
      { if ($hint==="")
        { $hint=$name; }
        else
        { $hint .= "<br>$name"; }
      }
    }
}
if($q!==“”)
{$q=strtolower($q);//不需要//$len=strlen($q);
foreach($a作为$name)
{if(stristr($name,$q))
{if($hint==“”)
{$hint=$name;}
其他的
{$hint.=“
$name”;} } } }
由于这一行,出现了问题

substr($name, 0, $len)
仅匹配字符串开头的[]的内容

你的代码应该是

if ($q !== "")
{ $q=strtolower($q); // not needed //$len=strlen($q);
  foreach($a as $name)
    { if (stristr($name, $q))
      { if ($hint==="")
        { $hint=$name; }
        else
        { $hint .= "<br>$name"; }
      }
    }
}
if($q!==“”)
{$q=strtolower($q);//不需要//$len=strlen($q);
foreach($a作为$name)
{if(stristr($name,$q))
{if($hint==“”)
{$hint=$name;}
其他的
{$hint.=“
$name”;} } } }
由于这一行,出现了问题

substr($name, 0, $len)

$hint.=“$name”

由于这条线路,问题出现了

substr($name, 0, $len)


$hint.=“$name”

这不是问题。这没有实现,这不是问题。对于所有问题的答案,这还没有实现。我选择这一条是因为它在改变了那一行之后起作用了。做得好。顺便说一下,我如何将输出限制为最多20个结果?好吧,您可以执行while循环,检查
br
标记的数量是否为20个或更多,以及I是否小于数组长度。感谢所有人的回答。我选择这一条是因为它在改变了那一行之后起作用了。做得好。顺便提一下,我如何将输出限制为最多20个结果?好吧,您可以执行while循环,检查
br
标记的数量是否为20个或更多,以及I是否小于数组长度。这是一个好主意,我可能会这样做。现在我想让它搜索任何字符,因为关键字是我工作的人已经知道的单词,但我想建立一个快速查找系统,以便更容易找到他们需要的文章。这是一个好主意,我可能会这样做。现在我想让它搜索任何字符,因为关键字是我工作的人已经知道的单词,但我想建立一个快速查找系统,以便更容易找到他们需要的文章。你的建议解决了什么问题?你能解释一下怎么做吗?一个解释就足够了,代码是不需要的,而且当放在注释中时很难阅读。问题的出现是因为这行$hint.=“$name”;你能给答案加上解释吗?这也会增加你的答案被投赞成票的机会,因为人们并不总是阅读评论。你的建议解决了什么问题?你能解释一下怎么做吗?一个解释就足够了,代码是不需要的,而且当放在注释中时很难阅读。问题的出现是因为这行$hint.=“$name”;你能给答案加上解释吗?这也会增加你的答案被投赞成票的机会,因为人们并不总是阅读评论。