我正在尝试制作高级搜索页面,其中使用可以使用普通搜索或提前搜索。
pizza @Chicago #312 !IL *606
这是预先搜索的一个示例,此搜索将查找任何具有“#34; pizza"”字样的餐馆名称。例如,对于#34; Pizza Land"。 " @芝加哥"将缩小位于芝加哥的过滤搜索餐厅。 "#312"将搜索餐厅电话,您也可以使用10位数的电话号码,例如"#3125436754"。 "!IL"将从伊利诺伊州搜索餐厅。 " * 606"将搜索餐馆的邮政编码,您也可以使用5位数的邮政编码,例如"#60643"。
高级搜索参数为@
适用于城市,!
适用于州,*
邮政编码,#
电话号码。
如果不需要,您不必使用所有搜索参数。以下是搜索的一些示例:
@Chicago
这将搜索芝加哥的餐馆城市。
#312654 *60644
这将搜索带有电话号码的餐厅" 312654"在邮政编码内" 60644"。
Pasta !NY
这将搜索纽约州内有意大利面单词的餐馆名称。
*60642
这将搜索" 60642"邮政编码。
Pizza Land
这是一个没有参数的普通搜索。
我已准备好数据库,我可以写下搜索查询。问题是我正在使用单个搜索文本输入。我需要php explode或类似选项的单词分离。就像我说的,可能没有高级搜索参数。可以有一个,两个,三个或四个。
我需要一个php函数来从搜索查询中提取参数。
答案 0 :(得分:0)
我不是正则表达式或preg的专家,感谢@ chris85我完成了我工作所需的功能。
function param($searchVal)
{
$output = array();
if (strpos($searchVal, "@") !== false) {
preg_match('/@[a-zA-Z ]+/', $searchVal, $cityMatch);
$output["city"] = ltrim($cityMatch[0], '@');
}
if (strpos($searchVal, "!") !== false) {
preg_match('/![a-zA-Z]{2}/', $searchVal, $stateMatch);
$output["state"] = ltrim($stateMatch[0], '!');
}
if (strpos($searchVal, ":") !== false) {
preg_match('/:[0-9]+/', $searchVal, $zipMatch);
$output["zip"] = ltrim($zipMatch[0], ':');
}
if (strpos($searchVal, "#") !== false) {
preg_match('/#[0-9]+/', $searchVal, $zipMatch);
$output["phone"] = ltrim($zipMatch[0], '#');
}
preg_match('/^[a-zA-Z 0-9]+/', $searchVal, $queryMatch);
$output["query"] = $queryMatch[0];
return $output;
}