在PHP中读取并迭代.txt

IMX*_*IMX 3 php file

我觉得我快到了.这是一个.txt文件,大约60千字节,充满德语单词.每个字都在新的一行.

我想用这段代码迭代它:

<?php

    $file = "GermanWords.txt";
    $f = fopen($file,"r");

    $parts = explode("\n", $f);

    foreach ($parts as &$v) 
    {
        echo $v;
    }

?>
Run Code Online (Sandbox Code Playgroud)

当我执行这段代码时,我得到:Resourceid#2 资源这个词不在.txt中,我不知道它来自哪里.

如何设置显示txt中的所有单词?

Ahm*_*şık 8

无需fopen使用file_get_contents:

$file = "GermanWords.txt";
$contents = file_get_contents($file);
$lines = explode("\n", $contents); // this is your array of words

foreach($lines as $word) {
    echo $word;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果filesize非常大(这不是这种情况),它会在服务器上提出很大的负载.在这种情况下,`fgets`更好 (2认同)

Spu*_*ley 7

fopen()只是打开文件,它不会读取它 - 在您的代码中,$f包含文件句柄,而不是文件内容.这就是"资源"这个词的来源; 它是PHP文件句柄的内部名称.

一个答案是替换fopen()file_get_contents().这将打开并在一个操作中读取文件.这样可以解决问题,但是如果文件很大,你可能不想一次性将整个内容读入内存.

所以我建议改为使用SplFileObject().代码如下所示:

<?php
$file = "GermanWords.txt";
$parts = new SplFileObject($file);
foreach ($parts as $line) {
    echo $line;
}
?>
Run Code Online (Sandbox Code Playgroud)

它只能在一行读入内存,因此您不必担心文件的大小.

希望有所帮助.

有关详细信息,请参阅PHP手册:http://php.net/manual/en/splfileobject.construct.php