0

我的问题是我从二维对象数组中抓取了一些用户的电子邮件,但没有得到重复或没有抓取它们。他们每个人都需要向他们发送一封电子邮件,但不超过 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 可能与另一个具有相同的电子邮件地址,我不希望这样。提前致谢!

4

3 回答 3

0

可能的解决方案是(如果您只有要比较的电子邮件地址)是组成一维数组,其中key将表示original key具有该电子邮件地址的数组的键)并且value是它email address本身。

然后,应用于array_unique()一维数组,然后仅使用数组统一后留下的键将该数组解析回所需结构的多维数组。

于 2012-08-09T19:52:01.607 回答
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

于 2012-08-09T20:00:53.710 回答
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>";
            }
        }
    }
}

我们将保留一个关联数组来记住到目前为止我们已处理的电子邮件,因此我们不再向它们发送任何内容。

于 2012-08-09T20:01:26.597 回答