我有一个包含如下数据的数组:
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和title数据连接成文本字符串,以便通过表单传递或根据需要显示在屏幕上。当脚本命中新的组织名称时,它应该将所有部分放在一起,然后开始下一个组织的电子邮件消息。
$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看起来像这样:
第一条消息:&lt; input type =“hidden”name =“pub_ids”value =“pubID_A1”&gt;
第二条消息:&lt; input type =“hidden”name =“pub_ids”value =“pubID_A1; pubID_A2”&gt;
第3条消息:&lt; input type =“hidden”name =“pub_ids”value =“pubID_A1; pubID_A2; pubID_A3”&gt;
第4条消息:&lt; input type =“hidden”name =“pub_ids”value =“pubID_A1; pubID_A2; pubID_A3; pubID_B1”&gt;
第5条消息:&lt; input type =“hidden”name =“pub_ids”value =“pubID_A1; pubID_A2; pubID_A3; pubID_B1; pubID_B2”&gt;
编辑:每当脚本重新开始时,都会添加$ pub_ids =''和$ titles =''。现在,这反映在foreach()近端的代码中。
现在问题似乎是第一个拥有多个出版物的组织只会列出一个出版物。然后,下一个组织将列出最后一个组织的出版物以及它们自己的出版物。然后其余的都被抛弃了。与第一个if()语句有关?由于$ current_org以NULL开头,因此第一个循环永远不会设置为$ value ['org']。我无法弄清楚如何解决这个问题。在哪里/如何检查组织值是否已更改?
非常感谢对这个问题的任何见解!
答案 0 :(得分: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>';
}
答案 1 :(得分:0)
更改
$pub_ids .= $value['pub_id'] . ';';
$titles .= '* ' . $value['title'] . '<br />';
为此:
$pub_ids = $value['pub_id'] . ';';
$titles = '* ' . $value['title'] . '<br />';
你必须删除连接