龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 遍历树的方法三

时间:2014-09-14 03:11来源:网络整理 作者:网络 点击:
分享到:
遍历树的方法三 非递归的广度优先算法,用了一个队列来实现[代码片段(42行)]

非递归的广度优先算法,用了一个队列来实现

<?php
define('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 '<pre>----------------------- 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</pre>';
    $mem2 = memory_get_peak_usage();
    printf('<pre>Max memory for '.$func.'() : %0.2f kbytes Running time for '.$func.'() : %0.f s</pre>',
    ($mem2-$mem1)/1024.0, $time);
    return $list;
}
profile('breadth_first_files', "D:\\www\\server");
?>
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接