2012-03-23 99 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