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

3

我想从数组中删除重复的值。 我知道使用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
}

如何做到这一点?

4
你能否发布期望的输出和输入? - KARTHI SRV
2
请提供您的完整示例。 - pawan sen
在 foreach 循环结束后,你可以使用 array_unique。 - Ashok Chandrapal
1
Use array_unique() ?? something like array_unique($images) - devpro
你的代码与你所说的无关。如果你想以另一种方式从数组中删除重复项,请使用双重迭代经典模式。 - manuelbcd
看了你的代码,$images 应该已经包含了一个唯一的文件名数组(没有操作系统允许重复的文件名。最接近的可能是*nix大小写敏感的文件名,例如 ab.txt != AB.txt,但仍然是一个有效的唯一文件名)。你能解释一下你想要实现什么吗? - Richard Parnaby-King
5个回答

8

在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
您提供的示例可以按如下方式进行修改:
$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将不包含重复项,并且它将输出每个图像(包括重复项)。

@ Martin先生,如果您在循环结束后使用array_unique($listImages),它将被优化。目前您每次都在循环中进行检查。 - Ashok Chandrapal
为什么要踩票...如果答案是正确的,而且与您不同 @mister martin - Veshraj Joshi
我想在foreach循环中打印每个值。因此,无法在循环结束后使用array_unique($listImages) - Bandara

1
基于 @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

使用哈希表应该会更快:

$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

我不确定我是否完全理解了你的意思。下面的方法对我有效,使用foreach循环从数组中删除重复的索引。

$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] => hans [1] => lara [2] => peter)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接