php foreach循环,带计数器,防止第一行和最后一行的回音
我正在尝试制作一个小脚本,用给定的目录文件内容操作一个txt文件。所发生的事情是,通过赢得命令行并执行“dir>file.txt”生成的文本文件中的行对于这个目的来说是垃圾。。。就像前7行和后3行一样。这些:php foreach循环,带计数器,防止第一行和最后一行的回音,php,string,foreach,cycle,Php,String,Foreach,Cycle,我正在尝试制作一个小脚本,用给定的目录文件内容操作一个txt文件。所发生的事情是,通过赢得命令行并执行“dir>file.txt”生成的文本文件中的行对于这个目的来说是垃圾。。。就像前7行和后3行一样。这些: O volume na unidade C nao tem nome. O numero de serie do volume - F879-0704 Directorio de C:\xampp\htdocs\projectX\images\ 06-01-2012 14:56
O volume na unidade C nao tem nome.
O numero de serie do volume - F879-0704
Directorio de C:\xampp\htdocs\projectX\images\
06-01-2012 14:56 <DIR> .
06-01-2012 14:56 <DIR> ..
.
.
.
140 ficheiro(s) 5.676.057 bytes
2 dir(s) 307.888.893.952 bytes livres
O卷不含统一名称。
O系列数字do卷-F879-0704
C目录:\xampp\htdocs\projectX\images\
06-01-2012 14:56 .
06-01-2012 14:56 ..
.
.
.
140 ficheiro(s)5.676.057字节
2个目录307.888.893.952字节
到目前为止,我掌握的代码如下:
$file = $_GET['file'];
$fp = fopen($file, "r");
$data = fread($fp, filesize($file));
fclose($fp);
$end = 0;
$i = 0;
while($end != 1) {
$output = str_replace("\t|\t", " | ", $data);
$output = explode("\n", $output);
foreach($output as $var) {
if($i > 7){
$newstring = substr($var, 36);
echo "File: " . $newstring . "<br />";
}
$i++;
}
echo "<br /><strong>End of file list!</strong>";
$end = 1;
$file=$\u GET['file'];
$fp=fopen($file,“r”);
$data=fread($fp,filesize($file));
fclose($fp);
$end=0;
$i=0;
而($end!=1){
$output=str_replace(“\t |\t”、“|”、$data);
$output=explode(“\n”,$output);
foreach($var输出){
如果($i>7){
$newstring=substr($var,36);
echo“文件:.$newstring.
”;
}
$i++;
}
echo“
文件列表结束!”;
$end=1;
}
我的问题:我如何让这个foreach循环也忽略文本文件的最后几行?我想你可以这样做:
$total = count($output);
foreach($output as $var) {
if ($i > 7 && $i < $total - 1) {
$newstring = substr($var, 36);
echo "File: ".$newstring."<br />";
}
$i++;
}
$total=计数($output);
foreach($var输出){
如果($i>7&&$i<$total-1){
$newstring=substr($var,36);
echo“文件:.$newstring.
”;
}
$i++;
}
不过,我同意@Jason McCreary对这个问题的评论。这不是一个完美的解决方案。但这对你的实际情况是合适的。或者,如果您不是被迫从文本文件工作,您可以按照函数的代码示例,以这种方式解析目录内容。我想您可以这样做:
$total = count($output);
foreach($output as $var) {
if ($i > 7 && $i < $total - 1) {
$newstring = substr($var, 36);
echo "File: ".$newstring."<br />";
}
$i++;
}
$total=计数($output);
foreach($var输出){
如果($i>7&&$i<$total-1){
$newstring=substr($var,36);
echo“文件:.$newstring.
”;
}
$i++;
}
不过,我同意@Jason McCreary对这个问题的评论。这不是一个完美的解决方案。但这对你的实际情况是合适的。或者,如果您不是被迫从文本文件工作,您可以按照函数的代码示例,以这种方式解析目录内容。用于在循环之前将$output数组拆分为所需的条目。用于在循环之前将$output数组拆分为所需的条目。您可以围绕
if
语句修改代码以查看像这样:
$total = count($output) - 3;
if($i > 7 && $i < $total) {
$total=计数($output)-3;
如果($i>7&$i<$total){
您可以围绕if
语句修改代码,如下所示:
$total = count($output) - 3;
if($i > 7 && $i < $total) {
$total=计数($output)-3;
如果($i>7&$i<$total){
试试这个:
$lastLine=count($output)-3;
for($i=7; $i<$lastLine; $i++) {
$newstring = substr($var, 36);
echo "File: " . $newstring . "<br />";
}
$lastLine=计数($output)-3;
对于($i=7;$i请尝试以下方法:
$lastLine=count($output)-3;
for($i=7; $i<$lastLine; $i++) {
$newstring = substr($var, 36);
echo "File: " . $newstring . "<br />";
}
$lastLine=计数($output)-3;
对于($i=7;$i),您可能应该使用专门为此而设计的或等效的PHP函数
但是,如果您坚持,您可以使用对数组进行切片。下面将删除第一行和最后一行
$output = array_slice($output, 2, count($output) - 4);
或者,您可以使用循环而不是foreach
循环来迭代所需的零件
$files = (count($output)-2);
for ($file=7; $file < $files; $file++)
$newstring = substr($output[$file, 36);
echo "File: " . $newstring . "<br />";
}
$files=(计数($output)-2);
对于($file=7;$file<$files;$file++)
$newstring=substr($output[$file,36);
echo“文件:.$newstring.
”;
}
您可能应该使用专门为此设计的PHP函数或等效的PHP函数
但是,如果您坚持,您可以使用对数组进行切片。下面将删除第一行和最后一行
$output = array_slice($output, 2, count($output) - 4);
或者,您可以使用循环而不是foreach
循环来迭代所需的零件
$files = (count($output)-2);
for ($file=7; $file < $files; $file++)
$newstring = substr($output[$file, 36);
echo "File: " . $newstring . "<br />";
}
$files=(计数($output)-2);
对于($file=7;$file<$files;$file++)
$newstring=substr($output[$file,36);
echo“文件:.$newstring.
”;
}
还可以使用php代码列出指定目录的文件。还可以使用php代码列出指定目录的文件。我会将所有行存储到一个数组中,拼接出需要的行,然后全部回显
//ADD FILE LINES TO ARRAY
foreach($output as $var) {
$file_lines[] = substr($var, 36)."\n";
}
//SPLICE OUT LINES NEEDED
$newlines = array_splice($file_lines, 7, count($file_lines)-3);
//ECHO DATA
foreach($newlines as $line) {
echo $line;
}
我会把所有的线存储到一个数组中,拼接出你需要的线,然后全部回显
//ADD FILE LINES TO ARRAY
foreach($output as $var) {
$file_lines[] = substr($var, 36)."\n";
}
//SPLICE OUT LINES NEEDED
$newlines = array_splice($file_lines, 7, count($file_lines)-3);
//ECHO DATA
foreach($newlines as $line) {
echo $line;
}
与忽略某些行号相比,构建更直观的东西更好。这很脆弱。相反,构建与您关心的行匹配的逻辑(即字符串或正则表达式匹配)在我看来,你试图获取目录或类似目录中的所有文件。如果是这样的话,有更好的方法。最基本的形式在这里演示:当PHP有类似这样的函数时,为什么要使用dir
列出目录?是的,Jason,我知道我应该这样做,但问题是我没有在我的时间框架内完成这项工作所需的知识:)但如果您愿意在这方面帮助我,所有行都是这样的:06-01-2012 13:31 38.915 nm0005013.jpg(我只需要文件名!没有其他内容)谢谢你抽出时间来comment@Kristian安东森:这个问题有一个非常简单的答案!使用PHP,我会更快地倾向于noob端而不是专家端:你最好构建更直观的东西,而不是忽略某些行号。这很脆弱。相反,构建与你关心的行相匹配的逻辑(即字符串或正则表达式匹配)在我看来,你试图获取目录或类似目录中的所有文件。如果是这样的话,有更好的方法。最基本的形式在这里演示:当PHP有类似这样的函数时,为什么要使用dir
列出目录?是的,Jason,我知道我应该这样做,但问题是我没有在我所掌握的时间框架内完成这项工作所需的知识:)但是如果你