2013-06-21 51 views
0

我有一個數據數組,看起來像這樣:如何將數組輸出到包含連接數據的電子郵件中?

01 | organization_1 | email_A | publication_A1 | pubID_A1 
02 | organization_1 | email_A | publication_A2 | pubID_A2 
03 | organization_1 | email_A | publication_A3 | pubID_A3 
04 | organization_2 | email_B | publication_B1 | pubID_B1 
05 | organization_2 | email_B | publication_B2 | pubID_B2 
06 | organization_3 | email_C | publication_C1 | pubID_C1 
07 | organization_4 | email_D | publication_D1 | pubID_D1 
08 | organization_4 | email_D | publication_D2 | pubID_D2 

陣列的結構是這樣的:

array('org' => organization_x, 'email' => email_x, 'title' => publication_x, 'pub_id' => pubID_x). 

我需要做的就是輸出這個數組,使其顯示爲個人電子郵件消息與每個提交按鈕後。查看此頁面的人將查看顯示的消息,並且他或她可以選擇單擊「提交」以將特定內容發送給相應的電子郵件。這裏是我們需要創建的初始顯示:

<!-- Message #1 --> 
<form> 
<input type="hidden" name="pub_ids" value="pubID_A1;pubID_A2;pubID_A3"> 
<input type="hidden" name="recipient" value="email_A"> 
<input type="hidden" name="organization" value="organization_1"> 
<!-- start on-screen text display --> 
To: email_A 

Your account contains the following publication titles: 

* publication_A1 
* publication_A2 
* publication_A3 

You can edit these publications after logging into our system. Your email 
address, email_A, serves as your username. 

Thanks! 
<!-- end on-screen text display --> 
<input type="submit" name="submit" value="submit"> 
</form> 

<!-- Message #2 --> 
<form> 
<input type="hidden" name="pub_ids" value="pubID_B1;pubID_B2"> 
<input type="hidden" name="recipient" value="email_B"> 
<input type="hidden" name="organization" value="organization_2"> 
<!-- start on-screen text display --> 
To: email_B 

Your account contains the following publications: 

* publication_B1 
* publication_B2 

You can edit these publications after logging into our system. Your 
email address, email_B, serves as your username. 

Thanks! 
<!-- end on-screen text display --> 
<input type="submit" name="submit" value="submit"> 
</form> 

...並且直到數組中的所有項目都被處理完畢。

我已經試了一下以下代碼的版本太久了。這個想法是遍歷每個項目,將pub_id和標題數據連接成文本字符串,以便通過表單傳遞或根據需要顯示在屏幕上。當劇本命中一個新的組織名稱時,它應該將所有片段放在一起,然後開始下一個組織的電子郵件。

$current_org = ''; 
$pub_ids = ''; 
$titles = ''; 

foreach ($array AS $value) 
{ 
    $pub_ids .= $value['pub_id'] . ';'; 
    $titles .= '* ' . $value['title'] . '<br />'; 
    if ($current_org != $value['org']) 
    { 
     echo '<form>'; 
     echo '<input type="hidden" name="pub_ids" value="' . $pub_ids . '">'; 
     echo '<input type="hidden" name="recipient" value="' . $value['email'] . '">'; 
     echo '<input type="hidden" name="organization" value="' . $value['org'] . '">'; 
     echo 'To: ' . $value['email']; 
     echo '<br /><br />'; 
     echo 'Your account contains the following publication titles:'; 
     echo '<blockquote>'; 
     echo $titles; 
     echo '</blockquote>'; 
     echo 'You can edit these publications after logging into our system. Your email address, ' . $value['email'] . ', serves as your username.'; 
     echo '<br /><br />'; 
     echo 'Thanks!'; 
     echo '<input type="submit" name="submit" value="submit">'; 
     echo '</form>'; 
     echo '<br /><br />'; 
     $pub_ids = ''; 
     $titles = ''; 
     $current_org = $value['org']; 
    } 
} 

但是實際上,我得到的是, 例如,看起來像這樣pub_ids:

月1日消息:<輸入類型= 「隱藏」 名稱= 「pub_ids」 值= 「pubID_A1」 >

第二消息:< INPUT TYPE = 「隱藏」 名稱= 「pub_ids」 值= 「pubID_A1; pubID_A2」 >

第三消息:< INPUT TYPE = 「隱藏」 名稱= 「pub_ids」 VA略= 「pubID_A1; pubID_A2; pubID_A3」 >

第四消息:< INPUT TYPE = 「隱藏」 名稱= 「pub_ids」 值= 「pubID_A1; pubID_A2; pubID_A3; pubID_B1」 >

第五消息:<輸入類型= 「隱藏」 名稱= 「pub_ids」 值= 「pubID_A1; pubID_A2; pubID_A3; pubID_B1; pubID_B2」 >

編輯:增加$ pub_ids = '' 和$標題= '' 每當腳本啓動了。這現在反映在foreach()附近的上面的代碼中。

因此,現在的問題似乎是第一個有多個發佈的組織只列出一個發佈。然後下一個組織獲得最後一個組織的出版物以及他們自己的出版物。然後其餘的被拋棄。與第一個if()語句有關嗎?由於$ current_org從NULL開始,第一個循環永遠不會被設置爲$ value ['org']。我無法弄清楚如何解決這個問題。在哪裏/如何檢查組織價值是否發生了變化?

對此問題的任何深入瞭解都非常感謝!

回答

0

變化

$pub_ids .= $value['pub_id'] . ';'; 
$titles .= '* ' . $value['title'] . '<br />'; 

此:

$pub_ids = $value['pub_id'] . ';'; 
$titles = '* ' . $value['title'] . '<br />'; 

必須刪除串聯

+0

嗨和謝謝埃米利奧 - 但沒有奏效。按照您的建議更改代碼只會爲每條消息提供一個發佈。有一些組織擁有多個出版物。這個改變意味着你只有一個。任何其他想法? – user1286755

+1

我試過的一件事是清除$ pub_ids和$標題,只要腳本重新開始。這現在反映在我在foreach()附近的原始文章中。修復了原始問題,其中的項目只是添加到pub_ids和titles串聯的字符串中。但現在在某些時候輸出不正確。它看起來像是擁有多個出版物的第一個組織,只列出了一個出版物。然後下一個組織獲得最後一個組織的出版物以及他們自己的出版物。然後其餘的被拋棄? – user1286755

1

我張貼了這個問題phpFreaks以及StackOverflow上。來自英國的Barand提供了一個了不起的答案,解決了我的問題。你可以在這裏看到他的回覆:http://forums.phpfreaks.com/topic/279455-how-to-output-an-array-into-email-messages-containing-concatenated-data/#entry1437523。我也複製/粘貼下面。奇蹟般有效。希望這對其他人有用。

Try: 

$arr = array (
    array('org' => organization_w, 'email' => email_w, 'title' => publication_w1, 'pub_id' => pubID_w1), 
    array('org' => organization_w, 'email' => email_w, 'title' => publication_w2, 'pub_id' => pubID_w2), 
    array('org' => organization_w, 'email' => email_w, 'title' => publication_w3, 'pub_id' => pubID_w3), 
    array('org' => organization_x, 'email' => email_x, 'title' => publication_x1, 'pub_id' => pubID_x1), 
    array('org' => organization_x, 'email' => email_x, 'title' => publication_x2, 'pub_id' => pubID_x2), 
    array('org' => organization_x, 'email' => email_x, 'title' => publication_x3, 'pub_id' => pubID_x3), 
    array('org' => organization_y, 'email' => email_y, 'title' => publication_y1, 'pub_id' => pubID_y1), 
    array('org' => organization_y, 'email' => email_y, 'title' => publication_y2, 'pub_id' => pubID_y2), 
    array('org' => organization_z, 'email' => email_z, 'title' => publication_z, 'pub_id' => pubID_z) 
); 

$currOrg = ''; 
foreach ($arr as $data) { 
    if ($currOrg != $data['org']) { 
     if ($currOrg) { 
      outputEmail ($currOrg, $currEmail, $titles, $ids); 
     } 
     $currOrg = $data['org']; 
     $currEmail = $data['email']; 
     $titles = $ids = array(); 
    } 
    $titles[] = $data['title']; 
    $ids[] = $data['pub_id']; 
} 
outputEmail ($currOrg, $currEmail, $titles, $ids); 

function outputEmail($org, $email, $titles, $ids) 
{ 
    // format your output here 
    echo "Organisation: $org<br>"; 
    echo "Email: $email<br>"; 
    echo "Titles: " . join(', ', $titles) . '<br>'; 
    echo "Ids: " . join(', ', $ids) . '<hr>'; 
} 
相關問題