这段代码有什么问题,我使用的是 PHP 8

问题描述

循环永远不会停止,而且它总是打印,不仅当 $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
    }