我目前正在建立一个网站,我需要一个非常先进的搜索引擎。我希望用户能够说Person @ company
或Product @ Category
。我如何检测@符号或任何特殊字符,过滤掉它们并根据返回的字符串创建单个变量。所以$a = Person
和$b = company
。
答案 0 :(得分:1)
将其作为格式为a = Person& b = company等的get请求发送。另一种方式正是您所说的,循环遍历字符串并逐个检查字符。当你遇到@符号时,你知道它前面的字母(不包括空格)是a的值,而@(不包括空格)之后的所有内容都是b的值。
抱歉,我尽可能地保持清醒。
答案 1 :(得分:1)
您可以使用explode()
拆分字符串:
$items = explode('@', 'Person @ Company', 2);
if(count($items) === 2) {
// Person @ Company
$person = trim($items[0]);
$company = trim($items[1]);
// Do your searching here...
} else {
// Search normally, not Person @ Company.
}
答案 2 :(得分:0)
这很容易实现;
function searchForPersonAtCompany($searchQuery) {
global $db;
$queryComponents = explode('@', $searchQuery, 2);
if (count($queryComponents) != 2) {
// '@' was not specified in the search query, return an empty array.
return array();
}
$person = $queryComponents[0];
$company = $queryComponents[1];
$sql = 'SELECT p.id AS personId, c.id AS companyId FROM people p JOIN companies c ON p.company = c.id WHERE p.name LIKE :person AND c.name LIKE :company';
$stmt = $db->prepare($sql);
$stmt->bindValue(':person', $person);
$stmt->bindValue(':company', $company);
$stmt->execute();
return $stmt->fetchAll();
}
您没有指定数据库架构,因此我不得不猜测您有一个people
表和一个companies
表,其中的人员与公司表格中的company
相关联领域。
Table: People
id | name | company
--------------------------------------------
1 | Alice | 1
2 | Bob | 1
3 | Charles | 2
Table: Companies
id | name
--------------------------------------------
1 | Company A
2 | Company B
您必须根据自己的需要调整代码,但使用我的测试数据时,以下内容应该有效;
searchForPersonAtCompany('Alice@Company A');
searchForPersonAtCompany('Charles@Company B');
注意:
:person
和:company
只是SQL中的变量。