在php字符串中循环多个hashtags以插入到数据库中

时间:2014-02-24 16:19:02

标签: php regex preg-match-all

我正在构建一个系统,并希望允许人们在其中留下带有哈希标记的注释,例如“这是#example #of #what I would to achieve”。

到目前为止,我已经设法插入第一个单词,如果有多个单词被哈希标记,请参阅下文:

happysam | #new #more #insert | #new

happysam | #new #more #insert | new

我为实现这一目标而编写的代码是:

preg_match_all('/#(\w+)/',$message,$matches);
$len = count($matches);
if($len > 0)
{
foreach($matches as $match)
    {
        $i = 0;
        $ins = "INSERT INTO teamHash (user, message, hashtag,time) VALUES ('$user', '$message', '$match[$i]','$time')";
        $query = $conn->prepare($ins);
        $query->execute();
    }
}

修改我的代码的最佳方法是什么,以便我可以遍历每个散列标记的单词,然后在文本中插入,即“example”而不是“#example”?

2 个答案:

答案 0 :(得分:2)

preg_match_all在成功匹配时返回多维数组。这里,$matches[0]是完整模式匹配的数组,$matches[1]是由第一个带括号的子模式匹配的字符串数组。你应该循环遍历$matches[1]

foreach ($matches[1] as $key => $value) {
    echo $value.' ';
    # code for inserting into database...
}

输出

new more insert example new more insert 

答案 1 :(得分:0)

不应该需要正则表达式:

$matches = array_map('trim', explode('#', $message));