2012-08-09 72 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

相关问题