Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要一些帮助来使用while循环从文本文件中获取内容吗_Php_Arrays_Loops_While Loop_Output - Fatal编程技术网

Php 需要一些帮助来使用while循环从文本文件中获取内容吗

Php 需要一些帮助来使用while循环从文本文件中获取内容吗,php,arrays,loops,while-loop,output,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: 我的问题是,如果它在文件的末尾,为什么会再次循环?我如何去掉最后一行 <?ph

因此,我使用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);

?>

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

if(!empty($arrayinfo))
   echo "<b>First name: </b> " . $arrayinfo[0] . " " .  "<b>Last name: </b>" .           $arrayinfo[1]. " " . "<b>Age: </b>" . $arrayinfo[2] . "<br>";
if(!empty($arrayinfo))
回声“名字:”$arrayinfo[0]。" " .  “姓:”$arrayinfo[1]。" " . “年龄:”$arrayinfo[2]。“
”;
我不确定它为什么读取最后一行之后再次运行循环。我的猜测如下。欢迎了解更多的人纠正我

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

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

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

if (empty($list)) { break; }
不起作用,那就试试吧

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

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

我尝试了这两种建议,但都不起作用。那么,是不是我放在文件中作为分隔符的逗号导致了这种情况的发生?@aynber的解决方案与我刚才写的在爆炸后检查而不是在爆炸前检查的解决方案相同。如果您发布了一个示例(简短)文本文件,您试图处理它,这可能会有所帮助。但是,如果没有看到,就很难弄清楚它为什么要这样做。如果文件末尾的行上有一个逗号,这可能是原因之一,但一般来说,逗号分隔的文本是可以的。如果文件末尾有逗号,那么空检查将不起作用,您需要使用类似strlen的内容。我已经把它添加到我的答案中了。
if (empty($arrayInfo[0]) || empty($arrayInfo[1])) { break; }