感谢您抽出宝贵时间阅读本文,我将感谢每一个回复,无论内容的质量如何。 :)
使用PHP,我试图获取文本文档(.txt)的最后15行并将该数据存储到php变量中。我知道这是可能的,但是当我得到最后15行时,是否可以保留订单?例如:
文本文件:
A
B
C
当我从最后15个字符中获取文本文档时,我不希望回声结束如下:
C
B
A
感谢所有的帮助,我期待着您的回复;谢谢。 :)如果我没有清楚地解释任何内容和/或您希望我更详细地解释,请回复。 :)
谢谢。
答案 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