2016-10-12 4 views
2

以下のPHPコードを使用して、関連するディレクトリからすべてのイメージ名を取得しました。すべてのサブディレクトリからイメージ名を取得する方法は?

$dir = "images"; 
$images = scandir($dir); 
$listImages=array(); 
foreach($images as $image){ 
    $listImages=$image; 
    echo ($listImages) ."<br>"; 
} 

これは完全に機能します。しかし、関連するディレクトリからすべてのサブディレクトリ内のすべてのイメージファイル名を取得したい。親ディレクトリに画像が含まれておらず、すべての画像にサブフォルダが含まれています。

  • 親ディレクトリ
    • サブディレクトリ
      • 画像1
      • 画像2
    • サブDir2を
      • 画像3
      • 私はすべてのサブフォルダを通過し、画像名を取得する方法のimage4

+0

自分自身を呼び出す関数を使用する必要があります。ディレクトリが空であるかどうかをチェックするだけです。そうでない場合は、サブディレクトリを取り、その中で関数を使用します。この方法ですべてのディレクトリをループします – KikiTheOne

+1

[PHP RecursiveDirectoryIteratorを使用した単純なディレクトリブラウザの構築](http://stackoverflow.com/questions/6223365/building-a-simple-directory-browser-using-php-recursivedirectoryiterator)の可能な複製 – KikiTheOne

答えて

1

以下を試してください。完全なディレクトリパスを取得するには、親ディレクトリとマージします。

$path = 'images'; // '.' for current 
    foreach (new DirectoryIterator($path) as $file) { 
    if ($file->isDot()) continue; 

    if ($file->isDir()) { 
     $dir = $path.'/'. $file->getFilename(); 

    $images = scandir($dir); 
     $listImages=array(); 
     foreach($images as $image){ 
      $listImages=$image; 
      echo ($listImages) ."<br>"; 
     } 
    } 
} 
1

再帰を利用すると、これを非常に簡単に行うことができます。この関数は、各ディレクトリが検索されるまで無期限にディレクトリを通過します。これはテストされていません。

$images = []; 

function getImages(&$images, $directory) { 
    $files = scandir($directory); // you should get rid of . and .. too 

    foreach($files as $file) { 
     if(is_dir($file) { 
      getImages($images, $directory . '/' . $file); 
     } else { 
      array_push($images, $file); /// you may also check if it is indeed an image 
     } 
    } 
} 

getImages($images, 'images'); 
関連する問題