2014-05-01 43 views
0

我有一個小功能,它使我的目錄文件夾/文件列表爲多維數組。目錄文件夾/文件列表數組php

我如何擁有以下結構的目錄列表。 (架構NO:3)

function dirToArray($dir) { 
    $contents = array(); 
    foreach (scandir($dir) as $node) { 
     if ($node == '.' || $node == '..') continue; 
     if (is_dir($dir . '/' . $node)) { 
      $contents[$node] = dirToArray($dir . '/' . $node); 
     } else { 
      $contents[] = $node; 
     } 
    } 
    return $contents; 
} 

我當前文件夾列表,陣列

$files = array (
    0 => 'do-update.php', 
    1 => 'sitemap.xml', 
    2 => 'sitemap.xml.gz', 
    3 => 'wp-config.php', 
    'wp-content' => 
    array (
    'uploads' => 
    array (
     2013 => 
     array (
     '05' => 
     array (
      0 => 'kabeduvarkad-1024x768.jpg', 
      1 => 'kabeduvarkad-150x150.jpg', 
      2 => 'kabeduvarkad-300x225.jpg', 
      3 => 'kabeduvarkad-940x198.jpg', 
     ), 
     10 => 
     array (
     ), 
    ), 
     2014 => 
     array (
     '02' => 
     array (
     ), 
    ), 
     2015 => 'de.php', 
    ), 
), 
    'wp-update' => 
    array (
    0 => 'wp-update.tar', 
    1 => 'wp-update.tar.gz', 
    2 => 'wp-update1.tar', 
    3 => 'wp-update1.tar.gz', 
), 
    4 => 'wp-update.tar.gz', 
); 

預期的文件夾列表,陣列

$expected = array (
    0 => 'do-update.php', 
    1 => 'sitemap.xml', 
    2 => 'sitemap.xml.gz', 
    3 => 'test.php', 
    4 => 'wp-config.php', 
    5 => 'wp-content/', 
    6 => 'wp-content/uploads/', 
    7 => 'wp-content/uploads/2013/', 
    8 => 'wp-content/uploads/2013/05/', 
    9 => 'wp-content/uploads/2013/05/kabeduvarkad-1024x768.jpg', 
    10 => 'wp-content/uploads/2013/05/kabeduvarkad-150x150.jpg', 
    11 => 'wp-content/uploads/2013/05/kabeduvarkad-300x225.jpg', 
    12 => 'wp-content/uploads/2013/05/kabeduvarkad-940x198.jpg', 
    13 => 'wp-content/uploads/2013/05/kabeduvarkad.jpg', 
    14 => '...' 
); 
+0

[This](http://mechanics.flite.com/blog/2013/09/30/how-to-do-an-upsert-in-mysql/)似乎是您的腳本的來源。與你的有些區別。 – cpilko

+0

我不明白這個關係 –

+0

對不起。我粘貼了另一個問題的鏈接。嘗試使用'find_all_files'函數[here](http://www.php.net/manual/en/function.scandir.php#107117) – cpilko

回答

-1

嘗試

function dirToArray($dir){ 
    $contents = array(); 
    foreach (scandir($dir) as $node) 
    { 
    if($node == '.' || $node == '..') continue;      
    if(is_dir($dir . '/' . $node)) { $contents[]=$dir . '/' . $node; 
    $contents[]=dirToArray($dir.'/' . $node); 
    } 
    else 
    { 
    $contents[] = $dir.'/' .$node; 
    } 
    } 
    return $contents; 
} 

    $dir='abcd'; $result=dirToArray($dir); 
    $it= new RecursiveIteratorIterator (new RecursiveArrayIterator($result));         $l=iterator_to_array($it,false); 
    echo '<pre>'; 
    print_r($l); 
    echo '</pre>'; 
+0

此腳本不會返回空目錄.. –

+0

請嘗試我已編輯的答案? – John

+0

非常感謝您的努力 –

0
$path = realpath('yourfolder/examplefolder'); 
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) { 
    echo "$filename\n"; 
} 

這裏是你正在尋找

+0

此腳本不會返回空目錄 –