我正试图找出一种方法来查看用户输入的搜索字词是否与$propertyData
数组中的任何内容相关。
到目前为止,我已经使用了in_array()
函数,但据我所知,只有当用户输入的搜索字词与数组字段完全匹配时才会匹配,例如用户输入“This is a house”并且它匹配“This is a house”的数组中的第一个字段,但是如果用户输入“This is a a”或“a house”它将不匹配,即使这些单词存在在那个领域。
if(in_array($getSearch, $propertyData)) {
// $getSearch is user input
// $propertyData is array containing fields
}
是否有可用于实现任务的功能/方式?
答案 0 :(得分:2)
试试preg_grep()。它通过正则表达式搜索数组,并返回与表达式匹配的值数组。因此,如果返回除空数组以外的任何内容,则认为是真的:
if(preg_grep("/$getSearch/", $propertyData)) {
对于不区分大小写的情况,请添加i
修饰符:
if(preg_grep("/$getSearch/i", $propertyData)) {
如果你想要一个匹配的所有值的数组(如果大于1),那么:
if($matches = preg_grep("/$getSearch/i", $propertyData)) {
答案 1 :(得分:1)
将array_filter()
与strpos()
结合使用,扫描数组以查找搜索字符串的部分匹配项,并返回找到匹配项的项目:
$result = array_filter($array,
function ($item) use ($getSearch) {
return (strpos($item, $getSearch) !== FALSE);
},
$propertyData);
或者,您可以按照AbraCadaver的回答中的建议使用preg_grep()
。它返回一个数组,该数组由与给定模式匹配的输入数组元素组成。正则表达式需要包含在分隔符中。我在下面使用了/
:
// escape search pattern to allow for special characters
$searchPattern = preg_quote($getSearch, '/');
if ($arr = preg_grep("/$searchPattern/", $propertyData)) {
print_r($arr);
// ...
}
答案 2 :(得分:1)
您可以使用以下内容:
$found = FALSE;
foreach($propertyData as $property) {
if(strpos($userQuery, $property)) {
$found = TRUE;
break;
}
}
但是,如果$propertyData
增长,此解决方案将变慢。然后你可以使用一个数据库。
答案 3 :(得分:0)
使用:
foreach($propertyData as $data )
{
if( strpos($data, $getSearch) )
{
//match found
}
}