This article mainly introduces the common methods of php tree traversal. The example analyzes the three methods of tree traversal commonly used by php. For more information, see
This article mainly introduces the common methods of php tree traversal. The example analyzes the three methods of tree traversal commonly used by php. For more information, see
This article describes common methods for retrieving the tree in php. Share it with you for your reference. The details are as follows:
1. Recursive depth-first algorithms:
<? Phpdefine ('ds', DIRECTORY_SEPARATOR); function rec_list_files ($ from = '.') {if (! Is_dir ($ from) {return array () ;}$ files = array (); if ($ dh = opendir ($ from) {while (false! ==( $ File = readdir ($ dh) {if ($ file = '. '| $ file = '.. ') {continue;} $ path = $ from. DS. $ file; if (is_file ($ path) {$ files [] = $ path;} $ files = array_merge ($ files, rec_list_files ($ path ));} closedir ($ dh);} return $ files;} function profile ($ func, $ trydir) {$ mem1 = memory_get_usage (); echo'
----------------------- Test run for '.$func.'() '; flush(); $time_start = microtime(true); $list = $func($trydir); //print_r($list); $time = microtime(true) - $time_start; echo 'Finished : '.count($list).' files
'; $ Mem2 = memory_get_peak_usage (); printf ('
Max memory for '.$func.'() : %0.2f kbytes Running time for '.$func.'() : %0.f s
', ($ Mem2-$ mem1)/1024.0, $ time); return $ list;} profile ('rec _ list_files', "D: \ www \ server ");?>
2. Recursive depth-first algorithms (implemented using a stack)
<? Phpdefine ('ds', DIRECTORY_SEPARATOR); function deep_first_list_files ($ from = '.') {if (! Is_dir ($ from) {return false;} $ files = array (); $ dirs = array ($ from); while (NULL! ==( $ Dir = array_pop ($ dirs) {if ($ dh = opendir ($ dir) {while (false! ==( $ File = readdir ($ dh) {if ($ file = '. '| $ file = '.. ') {continue;} $ path = $ dir. DS. $ file; if (is_dir ($ path) {$ dirs [] = $ path;} else {$ files [] = $ path ;}} closedir ($ dh) ;}} return $ files;} function profile ($ func, $ trydir) {$ mem1 = memory_get_usage (); echo'
----------------------- Test run for '.$func.'() '; flush(); $time_start = microtime(true); $list = $func($trydir); //print_r($list); $time = microtime(true) - $time_start; echo 'Finished : '.count($list).' files
'; $ Mem2 = memory_get_peak_usage (); printf ('
Max memory for '.$func.'() : %0.2f kbytes Running time for '.$func.'() : %0.f s
', ($ Mem2-$ mem1)/1024.0, $ time); return $ list;} profile ('deep _ first_list_files', "D: \ www \ server ");?>
Iii. Non-recursive breadth-first algorithm (implemented using a queue)
<? Phpdefine ('ds', DIRECTORY_SEPARATOR); function breadth_first_files ($ from = '. ') {$ queue = array (rtrim ($ from, DS ). DS); // normalize all paths $ files = array (); while ($ base = array_shift ($ queue) {if ($ handle = opendir ($ base ))) {while ($ child = readdir ($ handle ))! = False) {if ($ child = '. '| $ child = '.. ') {continue;} if (is_dir ($ base. $ child) {$ combined_path = $ base. $ child. DS; array_push ($ queue, $ combined_path);} else {$ files [] = $ base. $ child ;}} closedir ($ handle) ;}// else unable to open directory => next child} return $ files; // end of tree, file not found} function profile ($ func, $ trydir) {$ mem1 = memory_get_usage (); echo'
----------------------- Test run for '.$func.'() '; flush(); $time_start = microtime(true); $list = $func($trydir); //print_r($list); $time = microtime(true) - $time_start; echo 'Finished : '.count($list).' files
'; $ Mem2 = memory_get_peak_usage (); printf ('
Max memory for '.$func.'() : %0.2f kbytes Running time for '.$func.'() : %0.f s
', ($ Mem2-$ mem1)/1024.0, $ time); return $ list;} profile ('breadth _ first_files', "D: \ www \ server ");?>
I hope this article will help you with php programming.
,