需要一点帮助使用while循环从文本文件中获取内容

时间:2013-08-27 18:27:05

标签: php arrays loops while-loop output

所以我使用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);

?>

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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; }

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