微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在列值上使用 preg_match_all 内部循环时出现问题

如何解决在列值上使用 preg_match_all 内部循环时出现问题

我想将 preg_match_all() 用于循环内的“msg”列值。

但在我的循环中,它不适用于所有“msg”列值,仅适用于最后一个

以下是我写的代码

$query = "SELECT email_id,msg FROM emailtry";
$result = MysqLi_query($link,$query);
while ($obj = MysqLi_fetch_object($result)){
    printf("%s (%s) \n\n\n",$obj->email_id,$obj->msg);
    $string = $obj->msg;
    
    if (is_array($result) || is_object($result) ){  
        foreach($result as $result){
            if (preg_match_all("/Dynamic Screen:\s+[A-Za-z0-9_-]+\s+[A-Za-z0-9_-]+/",$string,$notificationtype)){
                var_dump($notificationtype);
            }else{
                return false;
            }
            if (preg_match_all("/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/",$bodylogonused)){
                var_dump($bodylogonused);
            }else{
                return false;
            }
        }
    }
}

解决方法

while() 已经在执行时,它里面还需要 foreach() 什么?

像下面这样:

$query = "SELECT email_id,msg FROM emailtry";
$result = mysqli_query($link,$query);
while ($obj = mysqli_fetch_object($result)){
    if (preg_match_all("/Dynamic Screen:\s+[A-Za-z0-9_-]+\s+[A-Za-z0-9_-]+/",$obj->msg,$notificationtype)){
        var_dump($notificationtype);
    }
    if (preg_match_all("/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/",$bodylogonused)){
        var_dump($bodylogonused);
    }
}

注意:正如@mickmackusa 建议的那样,在您的代码中使用 [\w-] 而不是 [A-Za-z0-9_-]。 (更简洁)

$query = "SELECT email_id,$query);
while ($obj = mysqli_fetch_object($result)){
    if (preg_match_all("/Dynamic Screen:\s+[\w-]+\s+[\w-]+/",$notificationtype)){
        var_dump($notificationtype);
    }
    if (preg_match_all("/[\w-]+@[\w-]+\.[\w-]+/",$bodylogonused)){
        var_dump($bodylogonused);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。