7

ファイル ツリーを作成したいのですが、この目的のために、ファイルとディレクトリの配列を多次元ファイル ツリー配列に変換する必要があります。例えば:

array
(
   'file.txt',
   'dir1/',
   'dir1/dir2/',
   'dir1/dir2/dir3/',
   'dir1/file.txt',
)

array
(
   'file.txt',
   'dir1' => 
   array
   (
       'dir2' => 
       array
       (
           'dir3' =>
           array(),
       ),
       'file.txt',
    )
)

これを達成するためにいくつかの機能を試しましたが、どれも機能しませんでした。たとえば、 を に変換する簡単な方法がないという問題が発生しましarray ('test','test','test'),'test'$array['test']['test']['test'] = 'test'

4

3 に答える 3

4

ここで私の投稿を見てください。

答えは: strtok があなたを救います。

<?php

$input = [
'/RootFolder/Folder1/File1.doc',
'/RootFolder/Folder1/SubFolder1/File1.txt',
'/RootFolder/Folder1/SubFolder1/File2.txt',
'/RootFolder/Folder2/SubFolder1/File2.txt',
'/RootFolder/Folder2/SubFolder1/SubSubFolder1/File4.doc',
];

function parseInput($input) {
  $result = array();

  foreach ($input AS $path) {
  $prev = &$result;

  $s = strtok($path, '/');

  while (($next = strtok('/')) !== false) {
    if (!isset($prev[$s])) {
      $prev[$s] = array();
    }

  $prev = &$prev[$s];
  $s = $next;
  }
$prev[] = $s;

unset($prev);
}
return $result;
}

var_dump(parseInput($input));

出力:

array(1) {
  ["RootFolder"]=>
  array(2) {
    ["Folder1"]=>
     array(2) {
       [0]=>
       string(9) "File1.doc"
       ["SubFolder1"]=>
       array(2) {
         [0]=>
    string(9) "File1.txt"
         [1]=>
         string(9) "File2.txt"
       }
     }
     ["Folder2"]=>
     array(1) {
       ["SubFolder1"]=>
       array(2) {
         [0]=>
         string(9) "File2.txt"
         ["SubSubFolder1"]=>
         array(1) {
           [0]=>
           string(9) "File4.doc"
         }
       }
     }
   }
 }
于 2014-06-17T15:40:29.110 に答える