2012-03-23 68 views
0

我在stackoverflow和整个互联网阅读所有与这个问题有关的主题,并找不到工作溶剂......每个拥有者都有他的物品,当有人购买他的物品时,拥有者会收到确认电子邮件,但是当购物车中有几个相同的所有者物品时,他会得到几个相同的电子邮件信件,所以我需要删除已公布的数组条目。我试图使用DISTINCT和array_uniques函数,但没有运气。任何建议?在一个函数中删除重复的数组值PHP

我有一个数组和函数来发送邮件..

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

$ mail_array的内容是什么?在这里发布 – Ben 2012-03-23 11:18:03

+1

我没有看到任何每个用户打来电话,我希望这是唯一的。以何种方式发送电子邮件是唯一的?你只是通过'array( 'name'=> $ owner )'并试图通过名称找到用户 – 2012-03-23 11:20:26

+0

这可能只是一个复制/粘贴错误,但是这段代码没有解析 - 它缺少一个'}'来关闭函数中的'foreach'。请确保你的代码示例是正确的,并请合理地分隔你的代码 - 只要我重新格式化代码,解析错误立即变得明显。 – DaveRandom 2012-03-23 11:24:07

回答

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

您需要将您的邮件功能的循环之外:

$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键添加回数组,并更改邮件函数中的数组处理以处理数组数组。

0

创建一个空数组,你将存储的电子邮件地址,你已经发出了一个信息:

$arrSent = array();

之前,你如果数组中存在发送邮件检查:

if (!in_array($email_to, $arrSent)) 
{ 
    //send the email 
} 

然后,当您发送邮件时,将地址添加到此阵列中:

@mail($email_to, $email_subject, $email_message, $headers); 
$arrSent[] = $email_to; 
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   
} 
+0

我试过了,但仍然获得重复的数组值.. – 2012-03-23 12:29:32