php - 将字符串分解为数组,然后在数组中搜索多个结果

标签 php mysql sql arrays search

背景

网站上的用户可以为他们的个人资料提供“关键字”,每个关键字都用“,”分隔。例如:

青苹果、香蕉、红苹果、梨

这作为字符串存储在数据库中。

我有一个实时搜索页面,用户可以在其中按关键字搜索用户。在此搜索中,页面会在用户键入时建议关键字。例如,用户可以键入:

苹果

页面会提示

青苹果红苹果

方法

当输入发送到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() 只会找到给定 appleapplepreg_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/

相关文章:

php - ORDER sql 查询未按预期工作

PHP-MySQL : Create variable for undefined index

c# - Linq to SQL 是用户日期范围与数据库日期范围相交

javascript - 如何使用 javascript 缓存 ActiveXObject 数据?

sql - 在 Access 的事件过程中运行查询?

php - 使用带 Zend_Db_Table 的 DataMapper 与仅直接使用带数据库适配器的 DataMapper 相比有什么优势?

php - 我可以在 php 中查询这个数组以产生结果还是应该在 MySQL 中完成?

php - 我的 PHP zip 函数使用了太多内存

php - 一次更新多对多连接器表

MySQL 关联子查询与引用外部查询的 WHERE 子句