2012-08-09 59 views
0

我的問題是,我從一個2D對象數組中抓取一些用戶的電子郵件,但沒有得到重複或不抓取它們。他們每個人都需要發送到他們的電子郵件,但不超過1如何將2維數組與自身進行比較以獲取唯一值?

我當前的代碼來呼應電子郵件:

for ($row = 0; $row < count($results); $row++){ 
    for($col = 0; $col < count($results[$row]); $col++){ 
     foreach($results[$row][$col]->result() as $user){ 
       echo "<p>".$user->email."</p>"; 
     } 
    } 
} 

我現在用的是笨框架是否會有所幫助。我查詢了array_diff()函數和array_unique(),但array_unique()不會採用2維數組,或者至少文檔說它不是爲此設計的。有什麼建議麼?

每個$ results [$ row]本身都是唯一的,但問題是一個$行可能與另一個具有相同的電子郵件地址,我不希望這樣。提前致謝!

+0

你是如何生成你的電子郵件地址列表?從數據庫查詢? – andrewsi 2012-08-09 19:46:32

回答

0

可能的解決方案是(如果你只有電子郵件地址比較)是組成一維數組,其中key將代表和valueoriginal key(與電子郵件地址陣列的鍵)是email address本身。

比,應用array_unique()一維陣列,並只使用陣列的統一後留下鍵事後分析此陣列回多維陣列所需的結構。

0

如果您收到你的郵件列表從數據庫中,添加distinct到查詢這樣:

$query = "SELECT DISTINCT email FROM emailTable"; //Add other fields to select as needed 

// Add this piece to order them. Not sure if you'd need it or not 
$query .= " ORDER BY email ASC"; 

$result = query_db($query); 

然後,你知道每個$row是獨一無二的你$result陣列

0

讓我們試試這個:

$existing_emails = array(); 
for ($row = 0; $row < count($results); $row++){ 
    for($col = 0; $col < count($results[$row]); $col++){ 
     foreach($results[$row][$col]->result() as $user){ 
      if(! isset($existing_emails[ $user->email ])) { 
       $existing_emails[ $user->email ] = 1; 
       echo "<p>".$user->email."</p>"; 
      } 
     } 
    } 
} 

我們將密切關聯數組記得到目前爲止,我們已經處理過,所以我們不發送任何的電子郵件給他們一次。

+0

如果他正在通過電子郵件發送此人員列表,我們可能希望將結果保留在一個容易訪問的數組中。我想我們可以看看'$ existing_array'的鍵,但是將鍵設置爲一個計數器並將該數組的值設置爲電子郵件可能更容易。 – DACrosby 2012-08-09 20:06:42

+0

謝謝!這很好用!但作爲道格拉斯A.克羅斯比,我需要發郵件然後輕鬆訪問會很好....我必須做一個foreach讓這些出來? – user1588572 2012-08-09 20:11:51

+0

好,我做了什麼改變,而不是將1的值存儲到$ existing_emails [$ user-> email]我做了以下操作: $ existing_emails [$ user-> email] = $ user-> email,這樣當我通過foreach循環時,我可以抓取併發送給他們一次。再次感謝大家! – user1588572 2012-08-09 20:20:19

相關問題