2012-07-19 245 views
4

我想在foreach循環內做一個foreach循環。在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 = "[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封電子郵件。這在第一個循環中以$爲單位。這工作。

現在下一個循環應該識別用戶輸入「hello $ name」並通過$ test數組循環來替換用戶$ name變量。

輸出將發送2封電子郵件。

  1. 郵件輸出: 到:[email protected] 消息:你好mname1

  2. 郵件輸出: 到:[email protected] 消息:你好mname2

讓我知道如果我需要更好地解釋,它很難對我解釋爲難。

+0

結果錯誤的方式是什麼? – 2012-07-19 22:17:57

+0

我忘記提及它會輸出數組「mname1」中的第一個名字,但它不會循環訪問數組。它每次輸出$ test [0] .. – Bolli 2012-07-19 22:19:31

+0

感謝您的答覆Nate ..查看我的最新評論。 – Bolli 2012-07-19 22:20:44

回答

1

這是你想要的嗎?

$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); 
} 
+0

感謝您的回覆。我的問題是,第二個foreach循環不循環數組。它只是每次輸出「mname1」。第二個foreach循環每次都會「重新開始」,因爲它在另一個循環內? – Bolli 2012-07-19 22:32:04

+0

@Bolli,看看更新的答案.. – valentinas 2012-07-19 22:48:25

+0

是的,看起來非常喜歡它。我只是測試了你的代碼,不知道我可以在數組中做數組:) - 但它每次只輸出「mname2」。編輯:檢查出 – Bolli 2012-07-19 22:58:53

2

當你做到以下幾點:

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

然後所有$navn文字出現次數將被替換(第一,第二,第三,...)。因此,第二次穿過該循環不可能取代更多。

如果要聲明應用可能的替換字符串的順序(或其他邏輯),則需要定義兩個佔位符或進行區分,或使用preg_replace_callback

如果您告訴我們(但您沒有),您只想在每次迭代中更換第一次出現,那麼正常的preg_replace(.., .., .., 1)將起作用。

+0

非常感謝!我現在明白了。我會盡快更新我的文章。 – Bolli 2012-07-19 22:38:11