如何将2维数组与自身进行比较以获得唯一值?

时间:2012-08-09 19:43:36

标签: php arrays email multidimensional-array unique

我的问题是我从一个2D对象数组中抓取一些用户的电子邮件,但没有得到重复或不抓取它们。他们每个人都需要发送一封电子邮件给他们但不超过1个。

我当前的代码以回复电子邮件:

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>";
         }
    }
}

我正在使用CodeIgniter框架,如果这会有所帮助。我查找了array_diff()函数和array_unique(),但是array_unique()不会采用二维数组,或者至少文档说它不是为此而设计的。有什么建议吗?

每个$ results [$ row]本身就是唯一的,但问题是一行$ row可能与另一行有相同的电子邮件地址,我不希望这样。提前谢谢!

3 个答案:

答案 0 :(得分:0)

可能的解决方案是(如果你只有要比较的电子邮件地址)是组成一个单调的数组,其中key代表original key键包含该电子邮件地址的数组)和value本身就是email address

然后,将array_unique()应用于此一维数组,然后仅使用剩余的键将此数组解析回所需结构的多维数组在统一数组之后。

答案 1 :(得分: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都是唯一的

答案 2 :(得分: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>";
            }
        }
    }
}

我们会保留一个关联数组来记住我们目前处理过的电子邮件,因此我们不再向他们发送任何内容。