Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在列值上使用preg_match_all inside循环时出现问题_Php_Arrays_Loops_Foreach_Preg Match All - Fatal编程技术网

Php 在列值上使用preg_match_all inside循环时出现问题

Php 在列值上使用preg_match_all inside循环时出现问题,php,arrays,loops,foreach,preg-match-all,Php,Arrays,Loops,Foreach,Preg Match All,我想对循环中的“msg”列值使用preg\u match\u all() 但在我的循环中,它不能处理所有的“msg”列值,只能处理最后一个 以下是我编写的代码: $query = "SELECT email_id, msg FROM emailtry"; $result = mysqli_query($link, $query); while ($obj = mysqli_fetch_object($result)){ printf("%s (%s) \n\

我想对循环中的“msg”列值使用
preg\u match\u all()

但在我的循环中,它不能处理所有的“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_-]+/", $string, $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_-]+/", $obj->msg, $bodylogonused)){
        var_dump($bodylogonused);
    }
}
注意:按照@mickmackusa的建议,在代码中使用
[\w-]
而不是
[A-Za-z0-9.-]
。(更简洁)


您不应该这样做:foreach($result as$result)。试着给他们起不同的名字。我不知道这是否有助于解决您的问题,但可能是这样。当执行时已经执行了
,那么它里面需要
foreach()
什么呢?我投票认为这个问题不清楚。您的实际输出与期望输出之间的差异没有清楚地表达出来。你是说
$string
只保留最后一行的
msg
——这是有道理的。如果您仅尝试访问
$string
,则不需要显示任何
If(is_数组(…)
条件块。为什么你有一个循环中断
返回
?对于提供的代码,我们不知道在哪里/为什么这是一个好主意。如果你用第二种模式搜索电子邮件地址,它不会捕获所有电子邮件地址。@mickmackusa我实际上不擅长正则表达式,我所做的只是帮助OP纠正他的c颂歌,使其工作。如果你有任何你可以张贴答案。我将不胜感激that@mickmackusa谢谢分享代码建议,补充说,你能看看一切都好吗。我在正则表达式方面真的很差…谢谢,正如我在问题下评论的那样,有一些有效的电子邮件地址我不会被捕获。
$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+[\w-]+\s+[\w-]+/", $obj->msg, $notificationtype)){
        var_dump($notificationtype);
    }
    if (preg_match_all("/[\w-]+@[\w-]+\.[\w-]+/", $obj->msg, $bodylogonused)){
        var_dump($bodylogonused);
    }
}