【发布时间】:2021-03-02 07:14:33
【问题描述】:
我想将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_-]+/", $string, $bodylogonused)){
var_dump($bodylogonused);
}else{
return false;
}
}
}
}
【问题讨论】:
-
你不应该这样做:foreach($result as $result)。尝试给他们不同的名字。我不知道这是否会帮助您解决问题,但也许。
-
当
while已经在执行时,那么其中的foreach()需要什么? -
我已将此问题投票为“不清楚”。您的实际输出与您期望的输出没有清楚地表达出来。你是说
$string只保留最后一行的msg- 这是有道理的。如果您只是尝试访问$string,那么您的minimal reproducible example 不需要显示任何if (is_array(... )条件块。为什么你有一个循环中断return?我们不知道在哪里/为什么这对于提供的代码是一个好主意。如果您使用第二种模式搜索电子邮件地址,它不会捕获所有电子邮件地址。
标签: php arrays loops foreach preg-match-all