2014-12-20 3 views
4

Я работаю с моим кодом, который отображает все папки и подпапки в моем каталоге.Удалить дубликаты в foreach

У меня есть простая проблема. Некоторые результаты повторяются или повторяются, и я не хочу отображать их.

Как я могу это сделать?

<?php 
    $dir = 'apps/'; 
    $result = array(); 

    if (is_dir($dir)) { 
      $iterator = new RecursiveDirectoryIterator($dir); 
      foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {      
       if (!$file->isFile()) { 
        $result = $file->getPath()."<br>"; 
        echo $result; 
       } 
      } 
    } 
?> 

ответ

1

Попробуйте

<?php 
    $dir = 'apps/'; 
    $result = array(); 

    if (is_dir($dir)) { 
      $iterator = new RecursiveDirectoryIterator($dir); 
      foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {      
       if (!$file->isFile()) { 
        $path = $file->getPath(); 
        if(in_array($path, $result)) { 
         continue ; 
        } 
        $result = $path."<br>"; 
        echo $result; 
       } 
      } 
    } 
?> 
+0

Там все еще дублирует – Lordsx

+0

он мог из-за пробелов в путь к файлу, вы можете обрезать путь до его проверки в массиве результатов – Nick

0

Вы можете использовать хэш-массив для проверки, если путь уже в списке

<?php 
    $dir = 'apps/'; 
    $result = array(); 
    $hash=array(); 

    if (is_dir($dir)) { 
      $iterator = new RecursiveDirectoryIterator($dir); 
      foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {      
       if (!$file->isFile()) { 
        $path = $file->getPath(); 
        if(isset($hash[$path])) { 
         continue ; 
        } 
        $hash[$path]=1; 
        $result[] = $path; 
        echo $path."<br>"; 
       } 
      } 
    } 
?> 
0

использование array_unique()

<?php 

$dir = 'apps/'; 
$result = array(); 

if(is_dir($dir)){ 

    $iterator = new RecursiveDirectoryIterator($dir); 
    foreach(new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file){ 
     if(!$file->isFile()){ 
      $result[] = $file->getPath(); 
     } 
    } 

    $uniqueResult = array_unique($result); 
    if(!empty($uniqueResult)){ 
     foreach($uniqueResult as $v){ // don't use 'for' use 'foreach' here. 
      echo $v.'<br>'; 
     } 
    } 

}