首页 > 解决方案 > 所有输入字段中的 preg_match_all

问题描述

我使用 preg_match_all 在“正文”中查找用户名并将它们保存在数据库中。如何在多个输入字段中找到用户名,例如:正文、标题和文章?以及如何在不保存重复条目的情况下将找到的引用保存到数据库?

if ($post) {
            preg_match_all('/\B@(\w+)/', $request->get('body'), $mentionedUsers);

            foreach ($mentionedUsers[1] as $mentionedUser) {

            $foundUser = User::where('username', $mentionedUser)->first();
                if(!$foundUser){
                    continue;
                }
            $foundUserId = $foundUser->id;
            $mentionedUser_save = new Mentioned_post_user;
            $mentionedUser_save->user_id_lead = Auth::user()->id;
            $mentionedUser_save->user_id = $foundUserId;
            $mentionedUser_save->post_id = $post->id;
            $mentionedUser_save->save();

            }
        }

标签: phplaravelpreg-match-all

解决方案


您可以利用whereIn('user_name', $mentionedUsers)而不是运行 foreach。

if ($post) {
    // assuming this line works and mentioned users are in $mentionedUsers[1]
    preg_match_all('/\B@(\w+)/', $request->get('body'), $mentionedUsers);

    $foundUsers = User::whereIn('username', $mentionedUsers[1])->get();

    if ($foundUsers) {
        foreach ($foundUsers as $foundUser) {
            $foundUserId = $foundUser->id;
            $mentionedUser_save = new Mentioned_post_user;
            $mentionedUser_save->user_id_lead = Auth::user()->id;
            $mentionedUser_save->user_id = $foundUserId;
            $mentionedUser_save->post_id = $post->id;
            $mentionedUser_save->save();
         }
     }
}

否则,您需要获取$mentionedUsers[1]with的唯一值array_unique()。(我建议上面的解决方案)


编辑:抱歉,您的问题有所不同。对于您的解决方案,我使用的方法是结合所有输入。

$theString = "$request->body $request->title $request->article";

preg_match_all('/\B@(\w+)/', $theString, $mentionedUsers);    

$userNamesArray = array_unique($mentionedUsers[1]);

$foundUsers = User::whereIn('username', $userNamesArray)->get();

推荐阅读