删除函数PHP中的重复数组值

时间:2012-03-23 11:12:44

标签: php arrays function

我在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          
}

4 个答案:

答案 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          
}