[英]Code to create a nested array of all files in a directory & subdirectories with PHP is not working
我正在嘗試在PHP手冊網站上使用示例函數(由用戶發布)。 該函數應該返回服務器指定目錄中所有文件和/或文件夾的嵌套數組。
我只是在學習php,所以我認為我更有可能做錯了,而且這個功能不太可能。 但如果有比下面的功能更簡單的方法,請告訴我。
我能夠迭代並回顯基本路徑中的所有文件,但不能回顯示例子文件夾中的文件。 子文件夾應該是的索引是空白或只是文件夾名稱而不是數組,具體取決於我使用的參數。 當我能夠獲取文件夾名稱時,我使用返回false的is_array對其進行了測試。
這是功能:
list_array:返回一個數組,其中包含可選的所有文件,僅包含文件系統路徑中的目錄或文件
@param $ base_path字符串絕對路徑或相對路徑
@param $ filter_dir boolean從結果中篩選目錄(如果$ recursive為true,則忽略在最后一個目錄中)
@param $ filter_files boolean從結果中篩選文件
@param $ exclude string管道分隔的文件字符串,始終忽略
@param $ recursive boolean底層的Descend目錄?
@return $ result_list數組嵌套數組或false
function directory_list($directory_base_path, $filter_dir = false, $filter_files = false, $exclude = ".|..|.DS_Store|.svn", $recursive = true){ $directory_base_path = rtrim($directory_base_path, "/") . "/"; if (!is_dir($directory_base_path)){ error_log(__FUNCTION__ . "File at: $directory_base_path is not a directory."); return false; } $result_list = array(); $exclude_array = explode("|", $exclude); if (!$folder_handle = opendir($directory_base_path)) { error_log(__FUNCTION__ . "Could not open directory at: $directory_base_path"); return false; }else{ while(false !== ($filename = readdir($folder_handle))) { if(!in_array($filename, $exclude_array)) { if(is_dir($directory_base_path . $filename . "/")) { if($recursive && strcmp($filename, ".")!=0 && strcmp($filename, "..")!=0 ){ // prevent infinite recursion error_log($directory_base_path . $filename . "/"); $result_list[$filename] = directory_list("$directory_base_path$filename/", $filter_dir, $filter_files, $exclude, $recursive); }elseif(!$filter_dir){ $result_list[] = $filename; } }elseif(!$filter_files){ $result_list[] = $filename; } } } closedir($folder_handle); return $result_list; }
}
這是我嘗試過的很多事情之一。 該數組包含5個元素,但只顯示其中的4個。 回應$ array [4]是空白的。 我只是想在這一點上獲得嵌套數組。 但是,如果有更簡單的方法來迭代它,任何提示都非常感激。
$directory_base_path = "../sandbox/";
$filter_dir = false;
$filter_files = false;
$exclude_files = ".|..|.DS_Store|dir_read_test.php";
$recursive = true;
$array = directory_list($directory_base_path, $filter_dir, $filter_files, $exclude_files, $recursive);
$array_length = count($array);
echo $array_length;
echo "<br/>";
$count = 0;
while ( $array_length >= $count ) {
echo $array[$count];
echo "<br/>";
$count = $count + 1;
}
仔細看看那個例程:
$result_list[$filename] = directory_list(/*recursive*/);
else
$result_list[] = $filename;
有什么不同? 遞歸條目放在索引$filename
,而直接內容放在升序整數索引下,使用[]
。 你的循環只會顯示整數索引。
如果你能
print_r($array);
你會看到所有的條目。 (或者你可以替換[$filename]
與[]
當然。)要通過他們自己的循環,更換while循環
foreach ( $array as $k=>$v )
{
echo "$k: $v<br/>";
}
(對於subdir,這將顯示“subdir:Array”,但這是另一個主題;您可以測試is_array($v)
並根據它執行一些操作)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.