我正在尝试在foreach循环中执行foreach循环。
我有一个表单,用户输入一些文本并点击发送。在服务器站点上,我遍历带有电子邮件地址的数组并发送短信。
现在我也希望用户能够在textarea中使用变量,比如$ name。 所以我的循环首先应该遍历电子邮件,然后使用我的数组中的名称str_replace userinput $ 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封电子邮件。这在第一个循环中以$到。这有效。
现在下一个循环应该识别用户输入“hello $ name”并循环遍历$ test数组,替换用户$ name变量。
输出将是2封电子邮件发送。
邮件输出: to:name1@gmail.com 消息:你好mname1
邮件输出: to:name1@gmail.com 消息:你好mname2
如果我需要更好地解释,请告诉我,我很难解释抱歉。
答案 0 :(得分:2)
执行以下操作时:
str_replace('$navn', $navn, $message)
然后 所有 $navn
的文字出现将被替换(第一个,第二个,第三个,......)。因此,第二次运行该循环不可能再替换任何东西。
如果要声明应用可能的替换字符串的顺序(或其他逻辑),则需要定义两个占位符或进行区分,或使用preg_replace_callback
。
如果您告诉我们(但您没有),您只想在每次迭代中替换第一次出现,那么正常的preg_replace(.., .., .., 1)
就可以了。
答案 1 :(得分: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);
}