PHP在txt文件中抓取最后15行

时间:2010-08-25 23:14:09

标签: php reverse text-files

感谢您抽出宝贵时间阅读本文,我将感谢每一个回复,无论内容的质量如何。 :)

使用PHP,我试图获取文本文档(.txt)的最后15行并将该数据存储到php变量中。我知道这是可能的,但是当我得到最后15行时,是否可以保留订单?例如:

文本文件:

A
B
C

当我从最后15个字符中获取文本文档时,我不希望回声结束如下:

C
B
A

感谢所有的帮助,我期待着您的回复;谢谢。 :)如果我没有清楚地解释任何内容和/或您希望我更详细地解释,请回复。 :)

谢谢。

6 个答案:

答案 0 :(得分:10)

尝试使用array_slice,它将返回数组的一部分。在这种情况下,您希望它返回数组的最后15行,所以:

$filearray = file("filename");
$lastfifteenlines = array_slice($filearray,-15);

答案 1 :(得分:5)

如果您不介意将整个文件加载到内存中:

$lines = array_slice(file('test.txt'), -15);
print_r($lines );

如果文件太大而无法放入内存,您可以使用循环方法:

// Read the last $num lines from stream $fp
function read_last_lines($fp, $num)
{
    $idx   = 0;

    $lines = array();
    while(($line = fgets($fp)))
    {
        $lines[$idx] = $line;
        $idx = ($idx + 1) % $num;
    }

    $p1 = array_slice($lines,    $idx);
    $p2 = array_slice($lines, 0, $idx);
    $ordered_lines = array_merge($p1, $p2);

    return $ordered_lines;
}

// Open the file and read the last 15 lines
$fp    = fopen('test.txt', 'r');
$lines = read_last_lines($fp, 15);
fclose($fp);

// Output array
print_r($lines);

如果文件少于15行,则该方法也可以工作 - 返回一个数组,但文件中有很多行。

答案 2 :(得分:2)

您可以使用带有排名位置的fseek向后搜索文件,随时计算换行符。

我太累了,无法写出复制/过去的代码,但是fseek手册页的评论中有一些例子非常接近你想要的。

答案 3 :(得分:1)

如果文件不大于可用内存,则可以执行此操作:

$fArray = file("filename");
$len = sizeof($fArray);
for($i=$len -15;$i<$len ;$i++)
{
   echo $fArray[$i];
}

如果您有一个数百兆字节的文件:

<击>

<击>
$rc = fopen("file","r");
for ($i=0; $line = fgets($file) ;$i++)
{
   if ($i%15 == 0)
   {
      $last15 = array();
   }
   $last15[] = $line;
}

echo join("\n",$last15);

<击>

答案 4 :(得分:1)

更长的阵列解决方案: array_slice(explode("\n",file_get_contents($file)),-15);

较短的阵列解决方案: array_slice(file($file),-15);

答案 5 :(得分:1)

此代码将打开文件,显示总行数,显示文件标题并显示$ limit中定义的最后一行文件。

    Console.WriteLine(CBool(-2)) ' True
    Console.WriteLine(CBool(-1)) ' True
    Console.WriteLine(CBool(0)) ' False
    Console.WriteLine(CBool(1)) ' True
    Console.WriteLine(CBool(2)) ' True
    Console.WriteLine(CBool(3)) ' True