返回顶部

收藏

遍历树的方法二

更多

非递归的深度优先的算法,用了一个栈来实现

<?php
define('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 '<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('deep_first_list_files', "D:\\www\\server");
?>
//该片段来自于http://outofmemory.cn

标签:php,安全

收藏

0人收藏

支持

0

反对

0