1

因此,我使用 while 循环和数组从文本文件中获取内容,然后将其回显。它的工作原理是一个问题,即最后一行:

First name: john Last name: paul Age: 44
First name: sam Last name: smith Age: 22
First name: jim Last name: bob Age: 33
First name: Last name: Age: 

我的问题是如果它位于文件末尾,为什么它会再次循环,我如何摆脱最后一行?

<?php

$fileread = fopen("textfile.txt", "r");

while (!feof($fileread)){

  $list = fgets($fileread);

  $arrayinfo = explode(",", $list);

  echo "<b>First name: </b> " . $arrayinfo[0] . " " .  "<b>Last name: </b>" .           $arrayinfo[1]. " " . "<b>Age: </b>" . $arrayinfo[2] . "<br>";

}
fclose($fileread);

?>
4

2 回答 2

2

听起来文件末尾有一个新行。您可以在回显之前检查以确保 $arrayinfo 不为空:

if(!empty($arrayinfo))
   echo "<b>First name: </b> " . $arrayinfo[0] . " " .  "<b>Last name: </b>" .           $arrayinfo[1]. " " . "<b>Age: </b>" . $arrayinfo[2] . "<br>";
于 2013-08-27T18:38:02.873 回答
0

我不确定为什么它会在最后一行之后读取循环再次运行。我的猜测如下。欢迎了解更多的人指正。

我怀疑 EOF 是文件末尾的一个字符。最后一个 fgets 将一行读取到 EOF 字符之前的 "\n" 或 "\r" 字符。因此!feof($fileread)测试仍然是 TRUE 导致最后一次读取 $list 可能为空。

我不确定你能做些什么,除了在每一行上运行一个测试,如下所示: if (empty($list)) { break; }这将在$arrayInfo = explode....

编辑:如果文件末尾有逗号(在它自己的行上),那么空检查将返回 false 并且您仍将打印一个空行。因此,如果:

if (empty($list)) { break; }

不起作用然后尝试

if (strlen($list) < 2) { break; }

只要在行尾有任何空格或类似的逗号,这将起作用。过去你可以测试爆炸的结果给了你 2 个可用的字段,例如:

if (empty($arrayInfo[0]) || empty($arrayInfo[1])) { break; }

这些问题经常与文件中的杂散字符有关,因此请确保文件干净以测试您的逻辑。然后,如果输入文件不是所有干净的构建过滤器来处理不干净的真实数据。

于 2013-08-27T18:40:04.837 回答