php foreach循环,带计数器,防止第一行和最后一行的回音

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

我正在尝试制作一个小脚本,用给定的目录文件内容操作一个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    <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,我知道我应该这样做,但问题是我没有在我所掌握的时间框架内完成这项工作所需的知识:)但是如果你