3

我有一个像这样的txt文件:

这是第 1 行。

这是第 2 行。

这是第 3 行。

这是其余的。

洛雷姆等。

我想使用 PHP 将前三行放入 $variable,然后将文档中的其他所有内容放入 $variable。

我在这方面取得了一定程度的成功:

<?php

$file = fopen("text.txt","r");
$count = "0";

while(! feof($file))
  {
  $count++;

  if ($count=="1") {
  $line1 = fgets($file);
  }

  if ($count=="2") {
  $line2 = fgets($file);
  }

  if ($count=="3") {
  $line3 = fgets($file);
  }

//everything else?

}

echo $line1;
echo $line2;
echo $line3;
//echo $everythingelse;

fclose($file);

?>

以下作品:

echo fgets($file);

但这不会:

$line1 = fgets($file);

那么,A)我做错了什么,B)我如何获取文件的其余部分,C)有没有更好的方法来实现这个?我觉得我的方式很笨拙,有人会建议一些明显的东西可以做到这一切。

多谢你们!

4

3 回答 3

4

这是最简单的方法,file()它将整个文件读入行数组。然后,您可以使用数组操作,例如array_splice()删除前三个并返回它们,然后使用\n.

// Reads the file into an array
$lines = file($file);

// Cuts off everything after the first three
$the_rest = array_splice($lines, 3);
// leaving the first three in the original array $lines
$first_three = $lines;

// Stick them back together as strings by implode() with newlines
$first_three = implode("\n", $first_three);
$the_rest = implode("\n", $the_rest);
于 2012-04-17T17:58:52.970 回答
3

你可以这样做:

$data = file("text.txt");
$beginning = implode(PHP_EOL,array_splice($data,0,3));
$end = implode(PHP_EOL,$data);

使用的函数:fileimplode常量array_splicePHP_EOL

于 2012-04-17T17:59:49.010 回答
2

A)您的代码在 if 结束之前都很好:您不能简单地将返回的值分配fgets给 a 中的变量while,因为循环将在下一次覆盖它,下一行的内容等等,直到它已经到了最后一行,不知何故总是空的。当您直接打印 的输出时fgetswhile将在循环中逐行回显。

B)您的代码通过这个小修正运行良好:使用连接赋值运算符将该行附加到变量而不是覆盖它。(字符串运算符

<?php

$file = fopen("text.txt","r");
$count = "0";

while(!feof($file)) {
  $count++;    
    switch ($count) {
        case "1":
            $line1 = fgets($file);
            break;
        case "2":
            $line2 = fgets($file);
            break;
        case "3":
            $line3 = fgets($file);
            break;
        default: 
            $everythingelse .= fgets($file);
    }
}

echo $everythingelse;

fclose($file);

echo "\n\n\n\n\n\n";
echo "Plus, here is line one: ".$line1."\n";
echo "This is line three: ".$line3."\n";
echo "And finally, line two: ".$line2."\n";

(我也用一个开关替换了你的 if ,这也是一样的)

示例输出: 输出截图

C)我认为你的方法修复了它对你的目的很好,特别是如果你已经通过 fgets 获取了文件内容(因此使用了一段时间)。这种方法是原生的,可以像你一样在一段时间内工作。当然,您也可以按照 Kolink 和 Michael 的建议使用implode,这甚至可能更快。

于 2012-04-17T18:57:09.113 回答