2011-01-28 6 views
1

私は大量のディレクトリがあります。画像は、1〜3ディレクトリ深さの間に構成されています。私はこれらのファイルのそれぞれのパスを返すためにphp5ディレクトリ反復を使用しています。これはその後のためにXMLファイルを構築しようとしています。ループのグループ化と処理の部分はPHPで結果は

何をしようとしているのですが、いったん画像のグループがあるディレクトリに到達すると、idはそれらをループして処理できる配列に格納します。

私は以下のコードを使用して、すべての画像を完全なディレクトリで読み込みます。

$it = new RecursiveDirectoryIterator("basedir/"); 
foreach(new RecursiveIteratorIterator($it) as $file) { 

$filearray = explode("/", $file); 

unset($output); 

    foreach ($filearray AS $key=>$value){ 


     if(strstr($value, 'basedir')){ 

      $output .= ""; //ignore the top level directory 

     }else if(!strstr($value, '.jpg') && !strstr($value, '.JPG')){ 

      $output .= "$value - "; //if its a directory name and not an image, add the path 

     }else{ 

      $output .= "$value <br>"; //if its a picture, add the filename and linebreak 

     } 
    } 

echo $output; 

この結果、次のような出力が得られます。達成するために探して何イム

accessories - J.L. Johnson Bridals 2011 - 123.jpg 
accessories - J.L. Johnson Bridals 2011 - 234.jpg 
accessories - J.L. Johnson Bridals 2011 - 345.jpg 
accessories - J.L. Johnson Bridals 2011 - 456.jpg 
bridal - Allure Bridals - Women - 123.jpg 
bridal - Allure Bridals - Women - 234.jpg 
bridal - Allure Bridals - Women - 345.jpg 
prom - MacDuggal Spring 2011 - MD prom - 123.jpg 
prom - MacDuggal Spring 2011 - MD prom - 234.jpg 
prom - MacDuggal Spring 2011 - MD prom - 345.jpg 
prom - MacDuggal Spring 2011 - MD prom - 456.jpg 

、私はループスルー、その後できることを、おそらく配列に、1つのディレクトリに画像をグループ化しています。このようなもの;

accessories 
    J.L. Johnson Bridals 2011 
     123.jpg 
     234.jpg 
     345.jpg 
     456.jpg 

bridal 
    Allure Bridals 
     Women 
      123.jpg 
      234.jpg 
      345.jpg 
prom 
    MacDuggal Spring 2011 
     MD prom 
      123.jpg 
      234.jpg 
      345.jpg 
      456.jpg 

答えて

2

私がよく理解していれば、ディレクトリを再帰的に読み込み、結果を配列のツリーで取得したいのですか?

は、これを試してください

function read_recursive($dir) { 
     if (is_dir($dir)) { 
       $list = scandir($dir); 
       $result = array(); 
       foreach($list as $key) { 
         if ($key == '.' || $key == '..') continue; 
         $result["$dir/$key"] = read_recursive("$dir/$key"); 
       } 
       return $result; 
     } else { 
       return $dir; 
     } 
} 
print_r(read_recursive('/some/dir')); 

これは各要素が配列(要素がディレクトリである場合)またはファイル名(要素がファイル名である)のいずれかである配列を返します。各配列要素は同じ規則に従います。

すべてのpathesは絶対です。ここでは相対pathesを返すバージョンです、助けてくれてありがとう

Array(
    accessories => array(
     J.L. Johnson Bridals 2011 => array(
      123.jpg => 123.jpg 
      234.jpg => 234.jpg 
      ... 
     ) 
    ) 
    bridal => array(
.... 
素晴らしい作品
+0

function read_recursive($dir) { if (is_dir($dir)) { $list = scandir($dir); $result = array(); foreach($list as $key) { if ($key == '.' || $key == '..') continue; $result[$key] = read_recursive("$dir/$key"); } return $result; } else { return basename($dir); } } 

は、出力は次のようなものになります!私はそれが必要なようにソートされているので、それを介して動作することができます。 – mrpatg

関連する問題