PHP遍历一个文件夹下所有文件和子文件夹中的所有文件,输出文件名称、清除数组中的空值,并重新排列数组键值

/////////////遍历文件夹和子文件夹中所有文件名,输出文件名////////////////////////////////////////////////////////////////////////////////////
<?php
function my_dir($dir) {
    $files = array();
    if(@$handle = opendir($dir)) { //注意这里要加一个@,不然会有warning错误提示:)
        while(($file = readdir($handle)) != = false) {
            if($file != ".." && $file != ".") { //排除根目录;
                if(is_dir($dir."/".$file)) { //如果是子文件夹,就进行递归
                    $files[$file] = my_dir($dir."/".$file);
                } else { //不然就将文件的名字存入数组;
                    $files[] = $file;
                }
 
            }
        }
        closedir($handle);
        return $files;
    }
}
echo "<pre>";
print_r(my_dir("."));
echo "</pre>";



/////////////遍历文件夹和子文件夹中所有文件名,输出所在路径+文件名////////////////////////////////////////////////////////////////////////////////////
<?php	
 
function my_dir($dir) {
	$filess = array();
    $files = array();
    $numsk=0; //计算总数的
    if(@$handle = opendir($dir)) { //注意这里要加一个@,不然会有warning错误提示:)
        while(($file = readdir($handle)) !=false) {
            if($file != ".." && $file != ".") { //排除根目录;
                if(is_dir($dir."/".$file)) { //如果是子文件夹,就进行递归
                    $files[$file] = my_dir($dir."/".$file); 
  ////////////////////////////////////////将路径写入数组中,方便操作文件和保存///////////////////////////////////////////////////////////////////////                  
                    $num = count($files[$file]); 
                    for( $nums= 0;$nums <$num;$nums++)
                    {
                    	$filess[$numsk] =  $files[$file][$nums]; 
                          $numsk = $numsk +1;
                    }
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    

                } else { //不然就将文件的名字存入数组;
                    $files[] = $dir."/".$file;

  ///////////////////////////////////////////////将路径写入数组中,方便操作文件和保存/////////////////////////////////////////////////////////////////    
                    $numfil = count($files);
                    for($numsa=0;$numsa <$numfil;$numsa++)
                    { 
                    	$filess[$numsa+$numsk] =   $files[$numsa]; 
                          $numsk = $numsk +1;
                    }
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    
 
                }
 
            }
        }
        closedir($handle);
        
        return $filess;
    }
}
echo "<pre>";
//print_r(my_dir("."));
echo "</pre>";

$files = my_dir('./TS');
$files = array_filter($files);//删除数组中空的元素
 var_dump($files);





//array_filter()函数的功能是利用回调函数来对数组进行过滤,如果没有回调函数,那么默认就是删除数组中值为false的项目。
例如:
$FileArray=array(0=>'1',1=>'',2=>'',3=>'go');
var_dump(array_file($FileArray))
输出结果为:
array(size=2)
    0 => string '1' (length=1)
    3 => string 'go' (length=2)
这样就引申出来一个新问题,如果我想对array_filter()处理过的新数组的键名序列化成0,1,2,3这样的怎么办呢?
这在数组比较中是很有用的,这里有两个函数可以选择array_values(),sort(). 
 
array_values()返回数组中所有的值,并给其建立数字索引。(注意,用这个之后key就是数字索引了)
 
sort()对数组进行排序。当函数结束时数组单元将被从最低到最高重新安排。成功返回true (注意: 本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。 )*sort函数返回值是布尔类型。
 
这里我选择了array_values()函数来处理:

var_dump(array_values(array_filter($FileArray)));
输出结果为:
array(size=2)
    0 => string '1' (length=1)
    1=> string 'go' (length=2)

猜你喜欢

转载自blog.csdn.net/tenggeer0789/article/details/89399073
今日推荐