2014-10-31 102 views
0

我有以下通过我的网站上的表单条目循环的脚本。忽略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"; 
    } 
+0

如果您从数据库中获取电子邮件地址(我假定MySQL),您可以在'SELECT'中使用'DISTINCT'。 – 2014-10-31 13:05:36

回答

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 
} 
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; 
    } 
} 
+1

'array_exists()'?那是什么? – Ghost 2014-10-31 13:10:30

+0

错误:p更正后 – 2014-10-31 13:11:23