PHP中的foreach循环内嵌foreach循环。

4
我正在尝试在foreach循环内部进行另一个foreach循环。
我有一个表单,用户在其中输入一些文本并点击发送。在服务器端,我通过电子邮件地址数组循环并发送文本消息。
现在我还希望用户能够在文本区域中使用变量,例如 $name。因此,我的循环应该首先循环遍历电子邮件,然后用我的数组中的名称替换用户输入的 $name 变量。
循环对于电子邮件部分($tlf)运行良好,但是替换 $name 部分却没有成功。
请问有人能发现我做错了什么吗?
$message = stripslashes(strip_tags($_POST['message2']));
$tlf=array("name1","name2");
$test=array("mname1", "mname2");
$subject = "Hello world";
$from = "me@gmail.com";
$headers = "From: $from";

foreach($tlf as $name){
    $to = $name. "@gmail.com";
    foreach($test as $navn){
        $message = str_replace('$navn', $navn, $message);}
    mail($to,$subject,$message,$headers);
}

非常感谢。
编辑: 输出是发送的电子邮件。假设用户输入“hello $name”。 我希望它首先遍历$tlf数组,在这种情况下创建2封电子邮件。这在第一次循环中作为$to进入。这个可以实现。
现在,下一个循环应该识别用户输入的“hello $name”,并循环遍历$test数组替换用户$name变量。
输出将是2封发送的电子邮件。
  1. 邮件输出: 收件人:name1@gmail.com 信息:hello mname1

  2. 邮件输出: 收件人:name1@gmail.com 信息:hello mname2

如果需要更好的解释,请告诉我,对不起,我很难解释清楚。

结果是怎么样错误的? - Nate C-K
我忘了提到它确实输出了数组“mname1”中的第一个名字,但它没有循环遍历整个数组。每次它都会输出$test [0]。 - Bolli
谢谢你的回复,Nate。请查看我的最后一条评论。 - Bolli
哪里是输出部分? - madfriend
请告诉我们您遇到的所有问题。要诊断一个“幽灵”真的很困难。您期望得到什么结果,实际上又得到了什么? - sdjuan
2个回答

2
当你执行以下操作时:
str_replace('$navn', $navn, $message)

那么 所有 的 $navn 文字都将被替换(第一个、第二个、第三个,以此类推)。因此,第二次运行该循环不可能再替换任何东西。
如果您想要声明应用可能的替换字符串的顺序(或其他逻辑),则需要定义两个占位符或进行某些区分,或者使用 preg_replace_callback
如果你已经告诉我们(但你没有这样做)你只想在每个迭代中替换第一次出现,那么普通的preg_replace(.., .., .., 1)会起作用。

非常感谢!我现在明白了。一旦我让它工作起来,我会尽快更新我的帖子。 - Bolli

1

这是你想要的吗?

$message = stripslashes(strip_tags($_POST['message2']));
$tlf=array(
            array("email" => "name1", "name" => "mname1"),
            array("email" => "name2", "name" => "mname2")
          );
$subject = "Hello world";
$from = "me@gmail.com";
$headers = "From: $from";

foreach($tlf as $contact){
    $to = $contact["email"] "@gmail.com";
    $replacedMessage = str_replace('$navn', $contact["name"], $message);
    mail($to,$subject,$replacedMessage,$headers);
}

谢谢回复。我的问题是第二个foreach循环没有遍历整个数组。它只是每次输出“mname1”。第二个foreach循环是否会“重新开始”,因为它在另一个循环内部? - Bolli
是的,它看起来非常像。我刚刚测试了你的代码,不知道我可以在数组中使用数组:) - 但它仍然每次只输出“mname2”。编辑:正在检查 - Bolli
你之前是将它赋值给了同一个变量。我已经更新了代码,请现在再试一下。 - valentinas
非常感谢!现在它可以工作了,这正是我想要的。我还没有我的数据库,但重点是从mysql数据库创建数组,然后通过这个循环。非常感谢你帮了我很多忙!干杯 - Bolli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接