我的问题是我正在从 2 D 对象数组中抓取一些用户电子邮件,但没有获得重复或未抓取它们。他们每个人都需要一封电子邮件发送给他们,但不超过 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可能与另一个具有相同的电子邮件地址,我不希望这样。提前感谢!
如果要从数据库中获取电子邮件列表,请按如下所示将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
数组中都是唯一的
让我们试试这个:
$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>";
}
}
}
}
我们将保留一个关联数组来记住到目前为止我们处理的电子邮件,这样我们就不会再向他们发送任何内容。
可能的解决方案是(如果您只有电子邮件地址要比较)是组成一个dim数组,其中key
将表示original key
(具有该电子邮件地址的数组键),value
是email address
本身。
然后,将array_unique()
应用于此一维数组,然后仅使用数组统一后留下的键将此数组解析回所需结构的多维数组。