Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在foreach循环中从数组中删除重复值?_Php_Arrays_Foreach_Duplicates_Array Unique - Fatal编程技术网

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

Php 如何在foreach循环中从数组中删除重复值?,php,arrays,foreach,duplicates,array-unique,Php,Arrays,Foreach,Duplicates,Array Unique,我想从数组中删除重复的值。我知道使用array\u unique(array)函数,但在foreach循环中遇到了问题。这不是一个重复的问题,因为我已经阅读了几个与此相关的问题,其中大多数问题都强制使用array\u unique(array)函数,但我不知道如何在foreach循环中使用它。这是我的php函数 $images = scandir($dir); $listImages=array(); foreach($images as $image){ $listImages=$im

我想从数组中删除重复的值。我知道使用
array\u unique(array)
函数,但在
foreach
循环中遇到了问题。这不是一个重复的问题,因为我已经阅读了几个与此相关的问题,其中大多数问题都强制使用
array\u 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
}
$images=scandir($dir);
$listImages=array();
foreach($images作为$image){
$listImages=$image;
echo substr($listImages,0,-25)。“
”;//删除最后25个字符 }

如何做到这一点

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

$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
}
$images=scandir($dir);
$listImages=array();
foreach($images作为$image){
如果(!in_数组($image,$listImages)){
$listImages[]=$image;
}
echo substr($image,0,-25)。“
”;//删除最后25个字符 }

现在,
$listImages
将不包含重复的图像,并且它将回显每个图像(包括重复的图像)。

基于@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
}
$images=scandir($dir);
$listImages=array();
foreach($images作为$image){
//如果已经回音,我们将继续下一次迭代
if(在数组中($image,$listImages)){
继续;
}
//否则,将图像添加到阵列和回显。
$listImages[]=$image;
echo substr($image,0,-25)。“
”;//删除最后25个字符 }
使用hashmaps应该更快:

$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
    }
}
$images=scandir($dir);
$listImages=array();
foreach($images作为$image){
如果(!isset($listImages[$image])){
$listImages[$image]=true;
echo substr($image,0,-25)。“
”;//删除最后25个字符 } }
我不确定我是否完全理解了你。为了使用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)

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

您可以发布您预期的输出和输入吗请指定您的完整示例是的,您可以在结束foreach循环后使用array\u unique。
使用array\u unique()
??类似于
array\u unique($images)
你的代码与你所说的无关。如果您想以另一种方式从数组中删除重复项,请使用双迭代经典模式@mister martin,如果在循环结束后使用
array\u unique($listImages)
,将对其进行优化。现在你每次都在循环中检查。为什么要否决投票。。。如果答案正确且与您不同@mister martinI希望打印foreach循环中的每个值。因此不能在循环结束后使用
数组\u unique($listImages)