这篇文章主要知识点是关于php、遍历目录、获取文件目录、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书
项目需要,需要写一个函数,能够遍历指定目录中的所有文件,而且这个目录中的子目录也要遍历。输出文件的属性信息,并存储。
想想需求,不就是一个ls -al命令吗,实现获取相关属性就好了,再加上一个遍历OK了事。
项目过程中,便于操作,使用了json格式存储,但是也发现了一些问题。谨此记录问题及代码,便于参考。
<?php define('INDEXFORMAT',"dir,name,size,perms,ower,group,ctime,mtime,atime,suffix") ; define('INDEXTXT', 'data/index.txt'); define('INDEXJSON', 'data/index.json'); date_default_timezone_set('Asia/Hong_Kong'); if (file_exists(INDEXTXT)) { unlink(INDEXTXT); } $dir = './'; getIndexFile($dir); /* * get index file * @filename INDEXTXT * @dir string * */ function getIndexFile($dir,$whitelist=''){ $string = ''; $dir = trim($dir); $dir = realpath($dir); $dir = $dir."//"; if(is_file($dir)){ putIndexFile($dir); }else{ putIndexFile($dir); $oDir = @opendir($dir); while($fileName = readdir($oDir)){ if($fileName!='.' && $fileName!='..'){ if(is_file($dir.$fileName)){ putIndexFile($dir.$fileName); }elseif(is_dir($dir.$fileName)){ getIndexFile($dir.$fileName); } } } } if (!file_exists(INDEXTXT)) { return false; } //$data = json_encode(getIndexFromFile()); //file_put_contents(INDEXJSON,$data); return true; } /* * Get Index file * @filename file.index * */ function putIndexFile($file){ if (!file_exists($file)) { return false; } $format = explode(',', INDEXFORMAT); $string = ""; foreach ($format as $key => $value) { if($key !== 0 ){ $string .= "\t"; } $string .= getFileAttr($file,$value); } $string .= "\n"; file_put_contents(INDEXTXT, $string, FILE_APPEND); } /* * * Get index string from index file * @return Array() * */ function getIndexFromFile($flag=''){ if (!file_exists(INDEXTXT)) { return false; } $arr = file(INDEXTXT); $format = explode(',', INDEXFORMAT); $result = array(); if(!empty($flag)){ $key = array_search($flag, $format); if ($key === false) { return false; } foreach ($arr as $str) { $tmp = explode(" ", trim($str)); $result[$flag][] = $tmp[$key]; } }else{ foreach ($arr as $str) { $tmp = explode(" ", trim($str)); foreach ($format as $key => $value) { $result[$value][] = $tmp[$key];//经测试这个操作比较耗时,大概0.7s的样子,慎用! } } } return $result; } /* * get file attributes * @var $file * @var $flag * @return String */ function getFileAttr($file,$flag){ if (!file_exists($file)) { return false; } switch ($flag) { case 'dir': if(is_file($file)) return dirname($file); return realpath($file); break; case 'name': if(is_file($file)) return basename($file); return '-'; break; case 'size': if(is_file($file)) return filesize($file); return '-'; break; case 'perms': return substr(sprintf('%o', fileperms($file)), -4);; break; case 'ower': return fileowner($file); break; case 'group': return filegroup($file); break; case 'ctime': return filectime($file); break; case 'mtime': return filemtime($file); break; case 'atime': return fileatime($file); break; case 'suffix': if(is_file($file)) return substr($file, strrpos($file, '.')+1); return '-'; break; default: return false; break; } } /* * get file size human readable */ function getFileSizeFormat($file){ if(!is_file($file)){ return '-'; } $flags = array('', 'K', 'M', 'G', 'T'); for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024; return round($size, 2).$flags[$i]; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。
以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。
Copyright 2018-2020 www.xz577.com 码农之家
版权投诉 / 书籍推广 / 赞助:520161757@qq.com
php中遍历二维数组并以表格的形式输出的方法
一.索引数组 ?php//使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引 $contact1 = array( //定义外层数组 array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子数组1 array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子数组2 array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'), //子数组3 array(4,'书某','D公司','重庆市','(023)13579135','sm@php.com') //子数组4 ); //以HTML表格的形式输出二维数组中的每个元素 echo 'table border="1" width="600" align="center"'; echo 'captionh1联系人列表/h1/caption'; echo 'tr bgcolor="#dddddd"'; echo 'th编号/thth姓名/thth公司/thth地址/thth电话/ththEMALL/th'; echo '/tr'; //使用双层for语句嵌套二维数组$contact1,以HTML表格的形式输出 //使用外层循环遍历数组$contact1中的行 for($row=0;$rowcount($contact1);$row++) { echo 'tr'; //使用内层循环遍……
PHP中使用foreach()遍历二维数组的简单实例
第一种类型 想用foreach()遍历整个二维数组: $team = array('lk','ok'); $book = array('linux服务器配置与管理',$team); foreach($book as $k=$val) //for $book each $value( as ) echo $k.'='.$val.''; 输出结果是: 0=linux服务器配置与管理 1=Array 当然,其实我是想要所有具体内容,而不是输出array。。。 所以应该采用如下做法,加入一个判断语句: $team = array('lk','ok'); $book = array('linux服务器配置与管理',$team); foreach($book as $k=$val) //意思是for $book each $value( as ) if( is_array($val) ) foreach( $val as $value) echo $value.''; else echo $k.'='.$val.''; 则输出为: 0=linux服务器配置与管理 lk ok echo "br"; echo "h1php遍历二维数组/h1"; //$team = array('lk','ok'); //$book = array('linux服务器配置与管理',$team); $arr = array( array('name'='系统配置','url'='?action=configgt;'验证码配置','url'='?action=configgt;'模板管理','url'='?action=configgt;'帐号管理','url'='……
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
主要运用 template 标签,可相当于 php foreach() foreach(lists as $key){ //todo foreach($key.自定义字段 as k){ //todo } } template v-for="key in lists" v-cloak tr td/td td /td td /td td /td /tr tr v-for="v in key.自定义字段" td/td td v-text=""/td td v-text=""/td td v-text=""/td /tr/template 以上这篇vue.js 双层嵌套for遍历的方法详解, 类似php foreach()就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……