2016-10-14 130 views
2

我想从数组中删除重复的值。我知道使用array_unique(array)函数,但在foreach循环中遇到问题。这不是一个重复的问题,因为我已经阅读了关于这个问题的几个问题,其中大部分都强制使用array_unique(array)函数,但我不知道在foreach循环中使用它。这是我的PHP功能。如何从foreach循环中的数组中删除重复的值?

$images = scandir($dir); 
$listImages=array(); 
foreach($images as $image){ 
    $listImages=$image; 
    echo substr($listImages, 0, -25) ."<br>"; //remove last 25 chracters 
} 

如何做到这一点?

+4

您可以发布乌尔预期输出和输入 –

+2

请注明您的完整的例子 –

+0

是你可以结束你的foreach循环使用后array_unique。 –

回答

4

这是非常复杂的,以除去从阵列重复的值在foreach循环中。只需将所有元素推送到一个数组,然后删除重复项,然后根据需要获取值。试试以下代码。

$listImages=array(); 
    $images = scandir($dir); 

    foreach($images as $image){ 
     $editedImage = substr($image, 0, -25); 
     array_push($listImages, $editedImage); 
    } 

    $filteredList = array_unique($listImages); 

    foreach($filteredList as $oneitem){ 
     echo $oneitem; 
    } 
0

如下你提供的示例可被修改:

$images = scandir($dir); 
$listImages=array(); 
foreach($images as $image) { 
    if (!in_array($image, $listImages)) { 
     $listImages[] = $image; 
    } 
    echo substr($image, 0, -25) ."<br>"; //remove last 25 chracters 
} 

现在$listImages将包含无重复,并且将回声每个图像(包括重复)。

+0

@ mister martin,如果在循环结束后使用'array_unique($ listImages)',它将被优化。现在你每次都进行循环检查。 –

+0

为什么要投票...如果回答是正确的,并且与您不同@mister martin –

+0

我想要在foreach循环中打印每个值。所以在循环结束后不能使用'array_unique($ listImages)' – Bandara

0

基于@mistermartins回答:

$images = scandir($dir); 
$listImages=array(); 
foreach($images as $image) { 
    //if already echo'd continue to next iteration 
    if (in_array($image, $listImages)) { 
     continue; 
    } 
    //else, add image to array and echo. 
    $listImages[] = $image; 
    echo substr($image, 0, -25) ."<br>"; //remove last 25 chracters 
} 
0

应该更快地使用包含HashMap:

$images = scandir($dir); 
$listImages = array(); 
foreach($images as $image) { 
    if (!isset($listImages[$image])) { 
     $listImages[$image] = true; 
     echo substr($image, 0, -25) ."<br>"; //remove last 25 chracters 
    } 
} 
0

我不知道如果我完全了解你。后续的方法为我工作,以使用foreeach循环从数组中删除重复的指标。

$list = array("hans", "peter", "hans", "lara", "peter", "lara", "lara"); 
sort($list); 
foreach ($list as $k => $v) { 
    if (isset($check)) { 
     if ($check === $v) { 
      unset($list[$k]); 
     } 
    } 
    $check = $v; 
} 

$noDuplicate = array_values($list); 

print_r($noDuplicate); 

给出以下结果:

阵列([0] =>汉斯[1] =>拉拉[2] =>彼得)