将字符串爆炸到数组,然后搜索数组以获得多个结果

时间:2014-04-23 15:44:35

标签: php mysql sql arrays search

背景

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

green apples, bananas, red apples, pears

它以字符串形式存储在数据库中。

我有一个livesearch页面,用户可以按关键字搜索用户。在此搜索中,页面会将关键字建议为用户类型。例如,用户可以键入:

apples

,页面会建议

green applesred apples

方式

当输入发送到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

问题

如何更改此代码以便返回所有匹配的搜索字词?

1 个答案:

答案 0 :(得分:1)

array_search()array_keys()只会找到apple applepreg_grep()会提供包含apple的任何条目,例如green apple

可以使用$result_array

按如下方式搜索preg_grep()
$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行。