133

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

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

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

?>
4

11 回答 11

416

如果您不需要任何特殊处理,应该可以满足您的需求

$lines = file($filename, FILE_IGNORE_NEW_LINES);
于 2011-05-28T04:48:46.543 回答
41

我发现最快的方法是:

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

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

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

根据您设置文本文件的方式,您可能不得不使用 \n 位。

于 2012-01-02T19:37:18.520 回答
32

只需使用这个:

$array = explode("\n", file_get_contents('file.txt'));
于 2013-04-05T11:15:14.853 回答
30
$yourArray = file("pathToFile.txt", FILE_IGNORE_NEW_LINES);

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

参考这里

于 2015-04-15T18:46:05.837 回答
22
<?php
$file = fopen("members.txt", "r");
$members = array();

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

fclose($file);

var_dump($members);
?>
于 2011-05-28T04:45:16.317 回答
9

就这么简单:

$lines = explode("\n", file_get_contents('foo.txt'));

file_get_contents()- 获取整个文件作为字符串。

explode("\n")- 将使用分隔符分割字符串"\n"- 换行符的 ASCII-LF 转义是什么。

但请注意 - 检查文件是否有UNIX -Line 结尾。

如果"\n"不能正常工作,你有另一个换行编码,你可以试试"\r\n""\r"或者"\025"

于 2014-03-21T16:17:38.097 回答
7
$lines = array();
while (($line = fgets($file)) !== false)
    array_push($lines, $line);

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

于 2011-05-28T04:45:55.513 回答
3
$file = __DIR__."/file1.txt";
$f = fopen($file, "r");
$array1 = array();

while ( $line = fgets($f, 1000) )
{
    $nl = mb_strtolower($line,'UTF-8');
    $array1[] = $nl;
}

print_r($array);
于 2013-12-01T13:28:36.793 回答
1

您在正确的轨道上,但是您发布的代码存在一些问题。首先,while 循环没有右括号。其次,每次循环迭代都会覆盖 $line_of_text,这可以通过在循环中将 = 更改为 .= 来解决。第三,您正在爆炸文字字符 '\n' 而不是实际的换行符;在 PHP 中,单引号将表示文字字符,但双引号实际上会解释转义字符和变量。

    <?php
        $file = fopen("members.txt", "r");
        $i = 0;
        while (!feof($file)) {
            $line_of_text .= fgets($file);
        }
        $members = explode("\n", $line_of_text);
        fclose($file);
        print_r($members);
    ?>
于 2011-05-30T05:24:43.920 回答
1
    $file = file("links.txt");
print_r($file);

这将接受 txt 文件作为数组。因此,在运行此页面之后,将任何内容写入 links.txt 文件(一个元素使用一行):) 你的数组将是 $file

于 2014-03-22T22:37:35.343 回答
0

这里已经很好地介绍了这一点,但是如果你真的需要比这里列出的任何东西更好的性能,你可以使用这种使用strtok.

$Names_Keys = [];
$Name = strtok(file_get_contents($file), "\n");
while ($Name !== false) {
    $Names_Keys[$Name] = 0;
    $Name = strtok("\n");
}

请注意,这假设您的文件保存\n为换行符(您可以根据需要对其进行更新),并且它还将单词/名称/行存储为数组键而不是值,以便您可以将其用作查找表,允许使用isset(快得多),而不是in_array.

于 2018-02-21T20:59:48.177 回答