php使用递归实现对文件夹以及更深层次文件夹文件读取
php使用递归实现对文件夹以及更深层次文件夹文件读取
<?php /** * Created in upload. * FileName: directory_foeach.php * User: fanfan * Date: 2015/8/7 * Time: 11:25 */ header('content-type:text/html;charset=utf-8'); /** * 转换文件名的字符编码 * 因为windows os 默认的是 gb2312,所以言转码 * @param $filename * @return string */ function transFileName($filename){ return iconv('gb2312','utf-8',$filename); } /** * 遍历文件夹里的文件 * @param $path * @return array */ function readDirectory($path){ $handle=opendir($path); $arr=array(); while(($item=readdir($handle))!==false){ if($item!='.'&&$item!='..'){ //如果是文件,直接读取文件存入数组 if(is_file($path.'/'.$item)){ $arr[]=transFileName($item); } //若文件夹中还有文件夹,使用递归读取文件 if(is_dir($path.'/'.$item)){ $func=__FUNCTION__; // $func($path.'/'.$item); $arr[]= $func($path.'/'.$item); } } } closedir($handle); return $arr; } //给出路径,测试上面方法 $path='file'; $read=readDirectory($path); echo '<pre>'; print_r($read); /** * 将多维数组转化为一位数组 * @param $arr * @return array|bool */ function arr_foreach ($arr) { static $tmp=array(); if (!is_array ($arr)) { return false; } foreach ($arr as $val ) { //如果遍历结果的时候遇到数组,使用递归在此进行遍历 if (is_array ($val)) { $func=__FUNCTION__; $func($val); } //直接把遍历出来的值存在数组 else { $tmp[]=$val; } } return $tmp; } //打印出是否是一维数组 print_r(arr_foreach($read));