如何在三行中读取文件?

时间:2012-06-17 07:12:21

标签: php file io

所以,假设你有一个php post脚本,它将你传递给它的任何内容作为新行附加到文本文件


假设该文件名为file.txt,如下所示:

11:45 Am
12:49 PM
Went to Lunch
3:25 PM

我想知道,我怎样才能编写一个将信息视为3对的PHP脚本。 所以在for循环中它会显示

line1 | line2 | line3
line4

请注意,line4没有任何内容,因此它已停止。

3 个答案:

答案 0 :(得分:5)

您可以使用(demo

$chunksOfThree = array_chunk(file('/path/to/file', FILE_IGNORE_NEW_LINES), 3);
foreach ($chunksOfThree as $chunk) {
    echo implode(' | ', $chunk), PHP_EOL;
}

这将输出所需的

11:45 Am | 12:49 PM | Went to Lunch
3:25 PM

请参阅

的手册条目

答案 1 :(得分:1)

fgets从文件中读取整行。它比fread更慢,但做你想要的。

您还可以使用file函数将整个文件读入数组。数组中的每个元素都对应于文件中的一行。

如果读取的行数不是3的倍数,则忽略最后1或2行。

如果没有更多数据,

fgets将返回false,因此您可以检查以确定其中一个三元组条目是否不完整。

while(!feof($fp)) {
    $line1 = fgets($fp);
    $line2 = fgets($fp);
    $line3 = fgets($fp);

    if ($line2 === false) {
        echo "$line1";
    } else if ($line3 == false) {
        echo "$line1 | $line2";
    } else {
        echo "$line1 | $line2 | $line3\n";
    }

答案 2 :(得分:0)

您可以将此代码用于此

<?php
$filename = "test.txt";
$fp = fopen( $filename, "r" ) or die("Couldn't open $filename");
$i=0;
while ( ! feof( $fp ) ) {
   $line = fgets( $fp, 1024 );
   if($i==2)
   {
      print "$line";
      $i=0;
      print "<br>";
   }
   else
   {
      print "$line | ";
      $i++;
   }
}
?>

Output : 

11:45 Am | 12:49 PM | Went to Lunch 
3:25 PM |