AJAX请求PHP只返回字符串中的第一个单词
我从W3学校找到了这段代码(不要评判我) 这段代码可以让你创建一个类似于谷歌使用AJAX的搜索字段 代码运行良好,但是在my.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?" 问题是,如果我键
$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 bystristr()
,因此最好使用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 bystristr()
,因此最好使用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”;你能给答案加上解释吗?这也会增加你的答案被投赞成票的机会,因为人们并不总是阅读评论。