忽略Foreach循环中的重复
问题描述:
我有以下通过我的网站上的表单条目循环的脚本。忽略Foreach循环中的重复
但是,我想删除任何重复的条目(在这种情况下,使用相同的电子邮件地址的条目)。
因此,如果我的foreach
循环找到重复的电子邮件地址,它打破了循环。
如何使用以下脚本实现此目的?
foreach ($scouts as $participant) {
$fname = ucfirst($participant['2']);
$lname = ucfirst($participant['3']);
$email = $participant['5'];
$html .= "\t<li><a href=>$fname $lname $email</a></li>\n";
}
答
创建另一个数组来存储我们已经输出电子邮件地址,然后在每次迭代检查我们还没有使用的电子邮件地址。
$emails = array(); //array to store unique emails (the ones we've already used)
foreach ($scouts as $participant) {
$fname = ucfirst($participant['2']);
$lname = ucfirst($participant['3']);
$email = $participant['5'];
if(in_array($email, $emails)) { //If in array, skip iteration
continue;
}
$html .= "\t<li><a href=>$fname $lname $email</a></li>\n";
$emails[] = $email; //Add email to "used" emails array
}
答
在您的foreach循环之前,创建一个新的空数组,用于存储已知的“已知”电子邮件地址。
在您的foreach循环中测试新数组是否已经包含电子邮件,如果没有,保存并打印它,否则忽略并再次循环。
$uniqueArray = array();
foreach ($scouts as $participant) {
if (!in_array($participant['5'], $uniqueArray)) {
$fname = ucfirst($participant['2']);
$lname = ucfirst($participant['3']);
$email = $participant['5'];
$html .= "\t<li><a href=>$fname $lname $email</a></li>\n";
$uniqueArray[] = $email;
}
}
+1
'array_exists()'?那是什么? – Ghost 2014-10-31 13:10:30
+0
错误:p更正后 – 2014-10-31 13:11:23
如果您从数据库中获取电子邮件地址(我假定MySQL),您可以在'SELECT'中使用'DISTINCT'。 – 2014-10-31 13:05:36