国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

php遍歷樹的常用方法匯總

2024-04-25 20:40:00
字體:
來源:轉載
供稿:網友

本文實例講述了php遍歷樹的常用方法。分享給大家供大家參考。具體如下:

一、遞歸的深度優先的算法:

<?php

define('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 '<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('rec_list_files', "D:/www/server");

?>

二、遞歸的深度優先的算法(用了一個棧來實現)

<?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");

?>

三、非遞歸的廣度優先算法(用了一個隊列來實現)

<?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");

?>

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呼玛县| 贵阳市| 佳木斯市| 衡水市| 新邵县| 察雅县| 巍山| 汝南县| 凌源市| 咸丰县| 册亨县| 革吉县| 福贡县| 邵武市| 都兰县| 固阳县| 隆林| 德庆县| 安达市| 祁门县| 蛟河市| 陇西县| 昆山市| 孝感市| 庄浪县| 兰溪市| 仙桃市| 云林县| 前郭尔| 中宁县| 威宁| 天全县| 湘乡市| 望城县| 翼城县| 云阳县| 历史| 柳林县| 抚顺市| 芜湖市| 枣强县|