[英]PHP Sending Arrays with Mail()
我试图通过邮件发送数组的内容,我尝试了print_r方法,但是不太喜欢它在电子邮件中的格式,所以我尝试了内爆,但是目前它实际上并没有发送内容,而是只是“阵列阵列”
这是我的代码:
<?php
$con = mysqli_connect("localhost", "user","pw", "db");
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
$recipient_email = "email@email.com";
$result= mysqli_query($con, "SELECT * FROM subscribers WHERE datetime_registered >= DATE_SUB(NOW(), INTERVAL 9 DAY)")or die(mysqli_error($con));
$subscribers = array();
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$subscribers[] = array(
"uid" => $row['id'],
"name" => $row['name'],
"email" => $row['email'],
"ip" => $row['ip'],
"date_registered" => $row['datetime_registered']
);
}
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= 'From: '.$recipient_email.''."\n";
$subject = "Subject";
$recipient = $recipient_email;
$content = implode("\n", $subscribers);
mail($recipient, $subject, $content, $headers);
?>
有谁知道出了什么问题?
如果要使用print_r邮寄数组,请使用true填充第二个参数:
print_r($array, true);
有关更多信息,请参阅以下链接: http : //php.net/manual/en/function.print-r.php
这是因为内implode
函数只会破坏您的顶级数组,即$subscribers
。 它不会下降到下一级数组数据。
你可以试试这个:
foreach($subscribers as $subscriber_data){
$dataset[] = implode(', ', $subscriber_data);
}
$content = implode("\n", $dataset);
mail($recipient, $subject, $content, $headers);
在$headers
变量之前,请使用以下代码:
$newSubscribers = array();
foreach($subscribers as $data)
{
$newSubscribers[] = implode(', ', $data);
}
$newSubscribers = implode("<br>\n", $newSubscribers);
$subscribers = $newSubscribers;
所以你的结束代码应如下所示:
...
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$subscribers[] = array(
"uid" => $row['id'],
"name" => $row['name'],
"email" => $row['email'],
"ip" => $row['ip'],
"date_registered" => $row['datetime_registered']
);
}
$newSubscribers = array();
foreach($subscribers as $data)
{
$newSubscribers[] = implode(', ', $data);
}
$newSubscribers = implode("\n<br>", $newSubscribers);
$subscribers = $newSubscribers;
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= 'From: '.$recipient_email.''."\n";
它不能像你想的那样工作的原因是因为implode()不能像你想象的那样使用关联数组。 我建议:
$subscribers[] = array(
"uid: {$row['id']}",
"name: {$row['name']}",
...
);
然后,当您使用implode解析此数组时,使用换行符作为分隔符,您将看到
"uid: someid
name: somename
....
"
我认为这就是你想要的。 干杯!
您在键值对中发送该数组非常好,而不是仅发送值..
使用以下脚本转换它并通过您的电子邮件发送。
$data = '';
foreach ($subscribers as $key=>$value){
$data .= $key.'-------'.$value;
$data.= "\n";
}
通过php邮件发送功能..
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= 'From: '.$recipient_email.''."\n";
$subject = "Subject";
$recipient = $recipient_email;
$content = $data;
mail($recipient, $subject, $content, $headers);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.