【问题标题】:PHP foreach loop inside foreach loopforeach 循环内的 PHP foreach 循环
【发布时间】:2012-07-19 04:25:23
【问题描述】:

我正在尝试在 foreach 循环中执行 foreach 循环。

我有一个表单,用户输入一些文本并点击发送。在服务器站点上,我遍历包含电子邮件地址的数组并发送文本消息。

现在我还希望用户能够在文本区域中使用变量,例如 $name。 所以我的循环应该首先遍历电子邮件,然后用我的数组中的名称 str_replace 用户输入 $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 消息:你好 mname1

  2. 邮件输出: 至:name1@gmail.com 消息:你好 mname2

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

【问题讨论】:

  • 结果哪里错了?
  • 我忘了提到它确实输出了数组“mname1”中的第一个名字,但它并没有循环遍历数组。它每次输出 $test[0] ..
  • 感谢 Nate 的回复。请看我最后的评论。
  • 输出的部分在哪里?
  • 请告诉我们您的所有问题。真的很难诊断出鬼魂。你期望什么,你会得到什么?

标签: php loops foreach


【解决方案1】:

当您执行以下操作时:

str_replace('$navn', $navn, $message)

然后,$navn所有 字面出现将被替换(第一个,第二个,第三个,...)。因此,第二次运行该循环不可能替代任何其他内容。

如果要声明应用可能的替换字符串的顺序(或其他逻辑),则需要定义两个占位符,或进行一些区分,或使用preg_replace_callback

如果您告诉我们(但您没有)只想替换每次迭代中的第一次出现,那么普通的 preg_replace(.., .., .., 1) 就可以了。

【讨论】:

  • 非常感谢!我现在明白了。一旦我开始工作,我会更新我的帖子。
【解决方案2】:

这是你想要的吗?

$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 循环是否每次都“重新开始”,因为它在另一个循环中?
  • 是的,看起来很像。我刚刚测试了你的代码,不知道我可以在数组中做数组:) - 但它每次仍然只输出“mname2”。编辑:检查一下
  • 您将其分配回同一个变量。我已经更新了它。立即尝试。
  • 非常感谢!它现在有效,这正是我想要的。我还没有我的数据库,但重点是从 mysql db 创建数组,然后通过这个循环。非常感谢你帮了我很多!干杯
猜你喜欢
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2016-09-02
  • 2014-03-15
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多