如何从foreach循环中删除数组中的重复值?

时间:2016-10-14 12:36:05

标签: php arrays foreach duplicates array-unique

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

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

怎么做?

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

您提供的示例可以修改如下:

project.android.minSdkVersion

现在$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 } 将不包含任何重复项,它将回显每个图像(包括重复项)。

答案 2 :(得分: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
}

答案 3 :(得分:0)

使用散列图应该更快:

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

答案 4 :(得分:0)

我不确定我是否完全了解你。后续方法对我有用,以便使用foreeach循环从数组中删除重复的indizes。

$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] =&gt; hans [1] =&gt; lara [2] =&gt;彼得)