【问题标题】:Read each line of txt file to new array element将 txt 文件的每一行读取到新的数组元素
【发布时间】:2011-09-03 19:39:51
【问题描述】:

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

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

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

?>

【问题讨论】:

  • 数组中是否有任何内容与您的代码一样存储?你有什么具体问题?
  • 警告:来自 fopen 的 FALSE 将发出警告并在此处导致无限循环。 php.net/manual/en/function.feof.php
  • 尽管线程的日期是 '\n\',但它必须是 "\n" 才能将其解析为转义序列,但不会被分解。

标签: php arrays text-files fgets


【解决方案1】:

就这么简单:

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

file_get_contents() - 以字符串形式获取整个文件。

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:
      $yourArray = file("pathToFile.txt", FILE_IGNORE_NEW_LINES);
      

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

      参考here

      【讨论】:

        【解决方案4】:
            $file = file("links.txt");
        print_r($file);
        

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

        【讨论】:

          【解决方案5】:
          $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);
          

          【讨论】:

            【解决方案6】:

            就用这个吧:

            $array = explode("\n", file_get_contents('file.txt'));
            

            【讨论】:

              【解决方案7】:

              我发现最快的方法是:

              // 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 位。

              【讨论】:

              • 我会使用“PHP_EOL”而不是“\n”,看起来是这样,$array = explode(PHP_EOL, fread($fp, filesize($filename)));
              • 感谢 Drew,在尝试了许多功能之后,您的功能是唯一有效的。我的搜索词是
                而不是您的 \n。我的文件被读取为仅一个大值数组,整个文本只是一个数组项 $myarr[0],因此改组不适用于单个项。希望它可以帮助某人。再次感谢。
              【解决方案8】:

              您在正确的轨道上,但您发布的代码存在一些问题。首先,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);
                  ?>
              

              【讨论】:

                【解决方案9】:

                如果你不需要任何特殊处理,this 应该做你正在寻找的东西

                $lines = file($filename, FILE_IGNORE_NEW_LINES);
                

                【讨论】:

                • file() 似乎比file_get_contents + explode 到数组要慢得多
                • @Ron 我同意。再说一次,您不应该在每次请求时都以这种方式读取文件。这很愚蠢,即使解决方案是最佳的。文件的内容应该存储在内存缓存中,甚至存储在数据库中。甚至 PHP 也存储已解析文件的内容。我的意思是,我们离 PHP 4.3 还很远
                【解决方案10】:
                $lines = array();
                while (($line = fgets($file)) !== false)
                    array_push($lines, $line);
                

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

                【讨论】:

                  【解决方案11】:
                  <?php
                  $file = fopen("members.txt", "r");
                  $members = array();
                  
                  while (!feof($file)) {
                     $members[] = fgets($file);
                  }
                  
                  fclose($file);
                  
                  var_dump($members);
                  ?>
                  

                  【讨论】:

                  • 好的,谢谢。但是我需要将一个可变的 = 设置为一个数组元素。 $var = $ary[1];不起作用。 ary[1]=“测试”。如果有帮助的话。
                  • 自己运行一个计数器并设置数组中的索引
                  猜你喜欢
                  • 1970-01-01
                  • 2012-10-25
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-10-18
                  相关资源
                  最近更新 更多