在Foreach循环中忽略重复项

时间:2014-10-31 13:04:00

标签: php

我有以下脚本在我的网站上循环表单条目。

但是,我想删除所有重复的条目(在这种情况下,使用相同的电子邮件地址的条目)。

因此,如果我的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";
    }

2 个答案:

答案 0 :(得分:4)

创建另一个数组来存储我们已经输出的电子邮件地址,然后在每次迭代检查时我们都没有使用该电子邮件地址。

$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
}

答案 1 :(得分:0)

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