代码之家  ›  专栏  ›  技术社区  ›  slickness

所有输入字段中的preg_match_all

  •  0
  • slickness  · 技术社区  · 6 年前

    我使用preg_match_all在“body”中查找用户名,并将其保存在数据库中。如何在几个输入字段中找到用户名,例如:body、title和article?如何在不保存重复条目的情况下将找到的引用保存到数据库中?

    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();
    
                }
            }
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   senty    6 年前

    你可以利用 whereIn('user_name', $mentionedUsers) 而不是跑来跑去。

    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] 具有 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();