将每行txt文件读取到新的数组元素

Dan*_*Dan 101 php arrays fgets text-files

我试图将文本文件的每一行读入一个数组,并将每一行放在一个新元素中.
我的代码到目前为止.

<?php
$file = fopen("members.txt", "r");
$i = 0;
while (!feof($file)) {

$line_of_text = fgets($file);
$members = explode('\n', $line_of_text);
fclose($file);

?>
Run Code Online (Sandbox Code Playgroud)

Yan*_*hon 383

如果您不需要任何特殊处理,应该是您正在寻找的

$lines = file($filename, FILE_IGNORE_NEW_LINES);
Run Code Online (Sandbox Code Playgroud)

  • 因为我实际上并不是每天都在编写PHP,所以我有时会忘记像这样的简单函数.我知道它存在,但不记得功能名称.这个答案在谷歌中排名很好.这就是SO的伟大之处. (3认同)
  • @罗恩我同意。话又说回来,您不应该在每次请求时都以这种方式读取文件。即使解决方案是最佳的,这也是愚蠢的。文件的内容应该存储在内存缓存中,甚至存储在数据库中。甚至 PHP 也会存储已解析文件的内容。我的意思是,我们距离 PHP 4.3 还很远 (3认同)
  • `file()` 似乎比 `file_get_contents` + `explode` 慢得多 (2认同)

Dre*_*tto 33

我找到的最快的方法是:

// Open the file
$fp = @fopen($filename, 'r'); 

// Add each line to an array
if ($fp) {
   $array = explode("\n", fread($fp, filesize($filename)));
}
Run Code Online (Sandbox Code Playgroud)

其中$ filename将是您文件的路径和名称,例如.../filename.txt.

根据您设置文本文件的方式,您可能需要使用\n位.

  • 我会使用“PHP_EOL”而不是“\n”,看起来如此, $array = explode(PHP_EOL, fread($fp, filesize($filename))); (5认同)

小智 24

只要用这个:

$array = explode("\n", file_get_contents('file.txt'));
Run Code Online (Sandbox Code Playgroud)


Gau*_*rav 21

<?php
$file = fopen("members.txt", "r");
$members = array();

while (!feof($file)) {
   $members[] = fgets($file);
}

fclose($file);

var_dump($members);
?>
Run Code Online (Sandbox Code Playgroud)


iia*_*chu 20

$yourArray = file("pathToFile.txt", FILE_IGNORE_NEW_LINES);
Run Code Online (Sandbox Code Playgroud)

FILE_IGNORE_NEW_LINES避免在每个数组元素的末尾添加换行符
您也可以使用FILE_SKIP_EMPTY_LINES跳过空行

这里参考


Raf*_*ler 7

$lines = array();
while (($line = fgets($file)) !== false)
    array_push($lines, $line);
Run Code Online (Sandbox Code Playgroud)

显然,您需要先创建一个文件句柄并将其存储$file.


Cod*_*uer 7

它很简单:

$lines = explode("\n", file_get_contents('foo.txt'));
Run Code Online (Sandbox Code Playgroud)

file_get_contents() - 将整个文件作为字符串.

explode("\n")- 将使用分隔符拆分字符串"\n"- 换行符的ASCII-LF转义.

但要注意 - 检查文件是否有UNIX -Line结尾.

如果"\n"不能正常工作,你有另外的2行编码,你可以尝试"\r\n","\r""\025"