问题描述
循环永远不会停止,而且它总是打印,不仅当 $i 等于 8 时
$file = file_get_contents ($fileUrl);
$i = 0;
while ($line = explode ("\r\n",$file)) {
if ($i == 8) {
print_r ($line);
exit ();
}
$i++;
}
顺便说一句,我需要使用file_get_contents,因为我使用的是DOM,但我使用该代码是因为我需要第8行中的数据,有没有更好的方法来获取特定行
解决方法
你不是在循环播放。您将 $line
设置为所有行的数组,而不是特定的行。并且您每次循环都将其设置为相同的内容,因此 while
条件永远不会改变。
但是,由于 $i == 8
调用,循环应该在 exit()
时停止。然后它将打印所有带有 print_r()
的行。
如果你想要第 8
行,只需索引数组。
$lines = explode("\r\n",$file);
if (count($lines) >= 9) {
print_r($lines[8]);
}
仅供参考,您也可以使用 file()
读取文件并将其拆分为多行:
$lines = file($fileUrl,FILE_IGNORE_NEW_LINES);
,
它是无限的,因为 explode
总是分解整个文件字符串并且它永远不会失败。您可以将它读入一个数组,但如果您正在处理文件中的其他行,这仅在没有 exit
的情况下才有用:
foreach(file($fileUrl) as $line) {
if ($i == 8) { // actually the ninth line
print_r ($line);
}
$i++;
}
或者按原样阅读并获得正确的行:
$lines = explode("\r\n",$file);
print_r($lines[8]); // actually the ninth line
,
如果你想得到第 8 行,你可以简单地这样做:
$line = explode ("\r\n",$file)[8];
print_r($line);
不使用循环
关于你的无限循环问题
$line = explode ("\r\n",$file)
返回 true,因为您只是将数组分配给此变量。
你应该像这样在这里使用 foreach
:
foreach(explode ("\r\n",$file) as $line){
// TO DO
}