【问题标题】:Exploding string to array, then searching array for multiple results将字符串分解为数组,然后在数组中搜索多个结果
【发布时间】:2014-06-08 13:55:56
【问题描述】:

背景

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

green apples, bananas, red apples, pears

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

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

apples

页面会提示

green apples, red 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

问题

如何更改此代码以返回所有出现的搜索词?

【问题讨论】:

    标签: php mysql sql arrays search


    【解决方案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。

    【讨论】:

    • 完美 - 谢谢。这是理想的。而且您在自己的表格中包含关键字是正确的-但是我正在工作的开发人员似乎不同意我的观点!再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多