背景
网站上的用户可以为他们的个人资料提供“关键字”,每个关键字都用“,”分隔。例如:
青苹果、香蕉、红苹果、梨
这作为字符串存储在数据库中。
我有一个实时搜索页面,用户可以在其中按关键字搜索用户。在此搜索中,页面会在用户键入时建议关键字。例如,用户可以键入:
苹果
页面会提示
青苹果
,红苹果
。
方法
当输入发送到keywordsearch.php
时,页面搜索以下内容:
$search_string_w = '%'.$search_string.'%';
$stmt = $dbh->prepare('SELECT `keywords` FROM `users` WHERE `keywords` LIKE ?');
$stmt->execute(array($search_string_w));
while($results = $stmt->fetch(PDO::FETCH_ASSOC)) {
$result_array[] = $results;
}
这将获取拥有该关键字的用户的行。但是,我想做的就是将每个单独的关键字显示为搜索建议,即使该关键字出现多次。
if (isset($result_array)) {
foreach ($result_array as $result) {
$keyw = explode(', ', $result['keywords']);
$keyk = array_search($search_string, $keyw);
现在,$keyw[$keyk]
将返回单个关键字。因此,如果搜索是apples
,则只会返回green apples
,而不会返回red apples
。
问题
如何更改此代码,使其返回所有出现的搜索词?
最佳答案
array_search()
和 array_keys()
只会找到给定 apple
的 apple
。 preg_grep()
将给出任何包含 apple
的条目,例如 green apple
。
可以使用 preg_grep()
搜索 $result_array
:
$keyw = explode(', ', $result['keywords']);
//an array you can implode or loop through
$keyk = preg_grep("/$search_string/", $keyw);
// for case-insensitive use: "/$search_string/i"
理想情况下,您应该有一个关键字表,其中每个关键字作为其自己的行以及相关的用户 ID。
关于php - 将字符串分解为数组,然后在数组中搜索多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249284/