Php 在搜索字符串时遇到困难

Php 在搜索字符串时遇到困难,php,Php,好的,我有一个csv文件,可以被解析和显示。我想让它可以搜索。因此,我有一个表单,它接受用户查询并将其与数组进行比较以查找匹配项。现在我有了: foreach( $last as $key=>$string ) { $hits[$key] = strpos( strtolower( $string . " " . $first[$key] . " " . $middle[$key] ), $query ); } 在这个小片段之前,我强制$query也降低 所以基本上这会连接全名,最

好的,我有一个csv文件,可以被解析和显示。我想让它可以搜索。因此,我有一个表单,它接受用户查询并将其与数组进行比较以查找匹配项。现在我有了:

foreach( $last as $key=>$string ) {
   $hits[$key] = strpos( strtolower( $string . " " . $first[$key] . " " . $middle[$key] ), $query );
}
在这个小片段之前,我强制
$query
也降低

所以基本上这会连接全名,最后一个中间,并搜索每个数组项以查找匹配项。如果
$点击[$key]!=false
我可以说那里有一场比赛。因此,我返回并显示来自主名称数组的结果。希望这是有道理的

现在从好的方面来看,我会得到很多应该显示出来的结果。就像我搜索
jo
,一个列表将列出所有约翰逊的姓氏

我遇到的问题是出现了与查询不匹配的结果,或者当我知道它们在名称列表中时,结果没有显示出来。因此,我知道
smith john
应该返回一个结果,但返回时没有结果

这是我第一次真正使用搜索功能来做一些事情,所以我想把它做好。

该函数返回匹配子字符串的索引,这意味着它可能返回
0

strpos('foo', 'f'); // 0
如果未找到子字符串,它将返回
FALSE

strpos('foo', 'z'); // FALSE
由于
0
FALSE
都是假值(这意味着它们的计算结果都是布尔值
FALSE
),因此需要使用严格的检查:

foreach( $last as $key=>$string ) {
   $hits[$key] = strpos( strtolower( $string . " " . $first[$key] . " " . $middle[$key] ), $query ) !== FALSE;
}
请注意
strpos(…)!==FALSE
而不是strpos(…)

编辑(对于@baudday):

代码:

函数返回匹配子字符串的索引,这意味着它可能返回
0

strpos('foo', 'f'); // 0
如果未找到子字符串,它将返回
FALSE

strpos('foo', 'z'); // FALSE
由于
0
FALSE
都是假值(这意味着它们的计算结果都是布尔值
FALSE
),因此需要使用严格的检查:

foreach( $last as $key=>$string ) {
   $hits[$key] = strpos( strtolower( $string . " " . $first[$key] . " " . $middle[$key] ), $query ) !== FALSE;
}
请注意
strpos(…)!==FALSE
而不是strpos(…)

编辑(对于@baudday):

代码:


嘿,太棒了!因此,这缓解了当我知道结果在那里时,结果不显示的问题。另一个问题仍在发生。我搜索一个名称,得到的结果甚至与查询内容相近。@baudday:我需要一个示例搜索词和示例数据来告诉您搜索的原因。好的,请尝试这些名称,格式为最后,中间第一个:Baier,Michael Joseph;贝克,迈克尔·丹尼尔;贝克,斯蒂芬妮·尼科尔;班菲尔德·克里斯托弗·菲利普;班克斯,约瑟夫·安德鲁;理发师,大卫·丹尼尔;现在在列表中搜索Michael。它应该返回整个列表。将在单独的注释中发布我的搜索代码。foreach($last as$key=>$string){$haystack=$string.“$first[$key]。$middle[$key]。$first[$key]。$middle[$key]。$middle[$key]。”“$first[$key]。$string.“$middle[$key];$hits[$key]=stropos(strotlower($haystack),$query)!==false;}@baudday:对我来说似乎没问题。我已经编辑了我的答案,以显示我正在测试的代码和输出。嘿,太棒了!因此,这缓解了当我知道结果在那里时,结果不显示的问题。另一个问题仍在发生。我搜索一个名称,得到的结果甚至与查询内容相近。@baudday:我需要一个示例搜索词和示例数据来告诉您搜索的原因。好的,请尝试这些名称,格式为最后,中间第一个:Baier,Michael Joseph;贝克,迈克尔·丹尼尔;贝克,斯蒂芬妮·尼科尔;班菲尔德·克里斯托弗·菲利普;班克斯,约瑟夫·安德鲁;理发师,大卫·丹尼尔;现在在列表中搜索Michael。它应该返回整个列表。将在单独的注释中发布我的搜索代码。foreach($last as$key=>$string){$haystack=$string.“$first[$key]。$middle[$key]。$first[$key]。$middle[$key]。$middle[$key]。”“$first[$key]。$string.“$middle[$key];$hits[$key]=stropos(strotlower($haystack),$query)!==false;}@baudday:对我来说似乎没问题。我已经编辑了我的答案,以显示我正在测试的代码和输出。