我在stackoverflow和整个互联网上阅读了与此问题相关的所有主题,并且无法找到工作解决方案...每个所有者都有他的项目,当有人购买他的项目时,所有者会收到一封确认电子邮件,但是当购物车中很少有相同的所有者项目,他得到几个相同的电子邮件信件,所以我需要删除dublicated数组条目。我试过使用DISTINCT和array_uniques函数,但没有运气。有什么建议吗?
我有一个发送邮件的数组和函数..
function email($mail_array) {
foreach(array_unique($mail_array) as $field => $value) {
$result = mysql_query("select email from users where $field='$value'");
$row = mysql_fetch_array($result);
$maail = mysql_real_escape_string($row['email']);
}
$email_to = "".$maail."";
// rest of mail formatting code
// create email headers
$headers = 'From: '.$email_from."\r\n" .
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
}
for ($i = 0; $i < $max; $i++) {
$pid = $_SESSION['cart'][$i]['productid'];
$owner = get_owner($pid);
$mail_array = array(
'name' => $owner
);
email($mail_array) //call function to send mail
}
答案 0 :(得分:1)
您正在将带有单个值的$ mail_array传递给邮件功能,因此正在发送多封邮件。 相反,将$ owner作为array()并在其中推送所有所有者名称。但在此之前检查数组是否已使用in_array()的同一所有者。 如果所有者不在数组中,则将其推入数组,否则执行下一次迭代。 并将此数组传递给邮件功能。
$mail_array = array();
for ($i = 0; $i < $max; $i++) {
$pid = $_SESSION['cart'][$i]['productid'];
$owner = get_owner($pid);
$mail_array = array_push($mail_array,$owner);
}
email($mail_array) //call function to send mail
答案 1 :(得分:1)
您需要将邮件功能移到循环之外:
$mail_array = array();
for($i=0;$i<$max;$i++){
$pid=$_SESSION['cart'][$i]['productid'];
$owner=get_owner($pid);
?>
<?
$mail_array[] = $owner;
}
email($mail_array) //call function to send mail
...您必须相应地更改邮件功能,因为您没有以这种方式传递name
密钥。或者将name
键添加回数组并更改mail函数中的数组处理以处理数组数组。
答案 2 :(得分:0)
创建一个空数组,您可以将已发送邮件的电子邮件地址存储到:
$arrSent = array();
在发送电子邮件之前,请检查您的阵列中是否存在:
if (!in_array($email_to, $arrSent))
{
//send the email
}
然后,当您发送邮件时,将地址添加到此阵列:
@mail($email_to, $email_subject, $email_message, $headers);
$arrSent[] = $email_to;
答案 3 :(得分:0)
由于您只使用name
字段,因此将此静态编码到查询中并将传递索引的名称数组更有意义。 array_unique
将正常运行。
E.g。
function email($mail_array) {
foreach(array_unique($mail_array) as $name) {
$result = mysql_query("SELECT email FROM users WHERE name = '".mysql_real_escape_escape_string($name)."'");
// ...
}
}
$mail_array = array();
for ($i = 0; $i < $max; $i++) {
$pid = $_SESSION['cart'][$i]['productid'];
$owner = get_owner($pid);
$mail_array[] = $owner;
email($mail_array) //call function to send mail
}