- 论坛徽章:
- 0
|
在群里聊天时讨论到递归的问题,我觉得所有递归的实现都可以化为不采用递归的实现,比如这个目录历遍,本来想用数据库来做的,后来想想太麻烦了,就写了这个,把所有信息都存在数组中了。当然我这个算法是目录树的核心算法部分,如果想有直接的表现,结合js跟据这个数组,操作dom是最快,最容易的一种方法。
友情邀请,欢迎来群里讨论PHP。
[群名]:PHP focus
[号]:2558759
- <?php
- //author:HanSanpu(韩三普)
- $dir[0][-1] = './';
- $out = $dir;
- $num = 1;
- $layer = 0;
- while ($out = new_dir($out, $num)) {
- ++$layer;
- $layer_dirs[$layer] = $out;
- }
- echo "<pre>";
- var_dump($layer_dirs);
- echo "</pre>";
- function new_dir($in, &$num) {//in and out
- $out = array();
- foreach ($in as $k=>$v) {
- $s = current($v);
- $out = $out + dir_maping($s, $k, $num);
- }
- return $out;
- }
- function dir_maping($root_dir, $p, &$num) {
- $fdir = array();
- if (is_dir($root_dir)) {
- if ($DH = opendir($root_dir)) {
- while (($file = readdir($DH)) !== false) {
- if (is_dir($root_dir.$file)) {
- if ('.' != $file && '..' != $file) {
- $fdir[$num][$p] = $root_dir.$file.'/';
- $num++;
- }
- }
- }
- }
- }
- return $fdir;
- }
- ?>
复制代码
这种算法与递归的不同在于,函数闭合上,如果到N层递归不闭合,可想而知会消耗多少内存,系统会垮掉的。
[ 本帖最后由 韩三普 于 2006-5-28 16:19 编辑 ] |
|