2011-03-15 40 views
2

我已經設法創建一個函數來掃描目錄和子目錄,然後將它們合併到一個數組中。返回每個子目錄中的第一個文件

我能得到這個很好的輸出,但我真正想要的是,它只能輸出從子目錄的第一個文件

function getFiles($directory) { 
    if($dir = opendir($directory)) { 
     $tmp = Array(); 
     while($file = readdir($dir)) { 
      if($file != "." && $file != ".." && $file[0] != '.') { 
       if(is_dir($directory . "/" . $file)) { 
        $tmp2 = getFiles($directory . "/" . $file); 
        if(is_array($tmp2)) { 
         $tmp = array_merge($tmp, $tmp2); 
        } 
       } else { 
        array_push($tmp, $directory . "/" . $file); 
       } 
      } 
     } 
     closedir($dir); 
     return $tmp; 
    } 
} 

$theFiles = getFiles($_SERVER['DOCUMENT_ROOT']."/images/gallery"); 

sort($theFiles); 

foreach ($theFiles as $v){ 
    echo "<img src=".$v." />"; 
} 
+1

以什麼順序**第一**?日期?尺寸?名稱?延期? – AbiusX 2011-03-15 22:02:41

+0

老實說並不重要... – MarkBeharrell 2011-03-16 09:41:52

回答

0

好吧,分而治之。您發佈的代碼顯示您非常聰明並且有足夠的經驗可以自己解決問題。你所遇到的問題僅僅是複雜性。所以,如果你只是把你想要做的每一步都放在一個額外的函數中,你應該自己輕鬆解決它。這是一個很不必要的例子,但我想給你一個。我現在沒有坐在一臺支持PHP的計算機上,所以我無法測試我的示例。我希望它能夠正常工作,或者至少足夠清楚地表明你可以自己調試它。

/** 
* goes through all entries in this folder and extracts the directories. 
*/ 
function getFolders($directory){ 
    if($dir = opendir($directory)) { 
    $arr - Array(); 
    while($file = readdir($dir)){ 
     if($file != "." && $file != ".." && $file[0] != '.' && is_dir($dir.'/'.$file)) { 
     $arr[] = $file; 
     } 
    } 
    closedir($dir); 
    return $arr; 
    } 
} 

/** 
* goes through a list of folders and takes out every first nonfolder 
*/ 
function getFirstFile($arr) { 
    $files = Array(); 
    foreach($arr as $directory){ 
    $dir = opendir($directory); 
    $file = 0; 
    while($file == '.' || $file == '..' || $file[0] == '.' || is_dir($file){ 
     $file - readdir($dir); 
    } 
    $files[] - $file; 
    } 
    return $files; 
} 

function renderFiles($files); 
    foreach($files as $file) echo '<img src='.$file.'/>'; 
} 

/** 
* puts all together 
*/ 
function getFiles($directory){ 
    renderFiles(
    getFirstFile(
     getFolders($directory); 
} 

這個解決方案肯定有一些開銷。如果你真的需要它,你可以稍後擺脫它。如果你開始逐步思考問題,你會發現不僅你的任務會變得更容易。此外,您的代碼將更易於維護。

+1

當我開始這個時候,這已經很晚了,所以我的大腦根本沒有工作。我已經開始考慮將功能分開,因爲你是對的,我已經變得複雜了。睡眠和新鮮的一天使所有的差異。 – MarkBeharrell 2011-03-16 09:38:40

+0

這樣做確實有用 - 但後來我意識到有一個非常簡單的解決方案盯着我的臉。我的圖像編號爲1.jpg,2.jpg等....爲什麼我只是使它只有1.jpgs strstr!愚蠢的 – MarkBeharrell 2011-03-24 10:18:16

+0

只是使用你的getFolders()功能,並想指出一些小錯誤。第三行應讀取$ arr = Array();而is_dir()函數應該有$ directory作爲參數而不是$ dir。 – 2011-08-16 17:14:02

0

您可以使用dirname獲得文件的目錄 - 輸出文件(這將是第一個) - 並將其保存到一個變量中。只要這個變量不改變,意味着你仍然在一個目錄中。

當它改變時,顯示文件(到達的新目錄)並更新變量。

1

你或許可以只把

continue; 

您的來電後,array_push()。

  } else { 
       array_push($tmp, $directory . "/" . $file); 
       continue; 
      } 
相關問題