PHP цикл foreach внутри цикла foreach



Я пытаюсь сделать цикл foreach внутри цикла foreach.



У меня есть форма, в которой пользователь вводит какой-то текст и нажимает отправить. На сайте сервера я перебираю массив с адресами электронной почты и отправляю текстовое сообщение.



Теперь я также хочу, чтобы пользователь мог использовать переменные в текстовой области, такие как $name.
Таким образом, мой цикл должен сначала перебирать сообщения электронной почты, а затем str_replace переменную userinput $name с именами в моем массиве.



Цикл прекрасно работает с напишите часть ($тлф), но не заменить $название детали.



Может ли кто-нибудь заметить, что я делаю неправильно?



$message = stripslashes(strip_tags($_POST['message2']));
$tlf=array("name1","name2");
$test=array("mname1", "mname2");
$subject = "Hello world";
$from = "[email protected]";
$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, заменяющий имя пользователя переменная.



Выход будет 2 письма отправить.





  1. Вывод Почты:
    кому: [email protected]
    сообщение: Привет mname1



  2. Вывод Почты:
    кому: [email protected]
    сообщение: Привет mname2



Дайте мне знать, если мне нужно объяснить лучше, мне трудно объяснить, извините.

656   2  

2 ответов:

Это то, что вы хотите?

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

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

Когда вы делаете следующее:

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

Тогда все буквальные случаи $navn будут заменены (первый, второй, третий,...). Так что повторное прохождение через эту петлю вряд ли сможет заменить что-то еще.

Вам нужно будет определить два заполнителя, или сделать некоторое различие, или использовать preg_replace_callback Если вы хотите объявить, в каком порядке (или в другой логике) применяются возможные строки замены.

Если бы вы сказали нам (но вы вы только хотели заменить первое появление в каждой итерации, тогда нормальный preg_replace(.., .., .., 1) будет работать.

Comments

    Ничего не найдено.