到达文件末尾时无限循环
Infinite Loop when getting to end of file
我正在尝试获取 PHP 函数来从文本文件中读取信息并将其作为数组 return 读取。我的函数似乎在文件开头运行良好,但在文件末尾或文件为空时卡住了。
这是我的函数和文本文件:
function readBook($file) {
$book = [];
$line = trim(fgets($file));
// Get rid of white lines at start of file
while ($line !== false && strlen($line) === 0) {
$line = trim(fgets($file));
}
if ($line === false) {
return false;
}
// Prepare and return the array
while ($line !== false && strlen($line) > 0) {
$pos = strpos($line, ":");
if ($pos != false) {
$key = trim(substr($line, 0, $pos));
$value = trim(substr($line, $pos + 1));
$book[$key] = $value;
//echo $line . "\n";
$line = trim(fgets($file));
} else {
throw new \Exception("Erreur - Fichier mal écrit", 125);
}
}
return $book;
}
文本文件是:
couverture : scorpion.jpg
titre : La marque du diable
serie : Le Scorpion
auteurs : Marini - Desberg
année : 2000
catégorie : bandes-dessinées
couverture : BOB.jpg
titre : La marque du BOB
serie : Le BOB
auteurs : Marini - Desberg
année : 2000
catégorie : bandes-dessinées
在这个例子中调用函数 3 次时,应该 return 只有两本书。它现在所做的是 return 两本书并陷入无限加载循环。
你们能帮帮我吗?
此致
在 EOF,trim(fgets($fileHandle))
returns ""
而不是 false
开始时改变
$line = trim(fgets($file));
while ($line !== false && strlen($line) === 0) {
来自
$line = fgets($file);
while ($line !== false && strlen(trim($line)) === 0) {
$line = fgets($file);
}
我正在尝试获取 PHP 函数来从文本文件中读取信息并将其作为数组 return 读取。我的函数似乎在文件开头运行良好,但在文件末尾或文件为空时卡住了。
这是我的函数和文本文件:
function readBook($file) {
$book = [];
$line = trim(fgets($file));
// Get rid of white lines at start of file
while ($line !== false && strlen($line) === 0) {
$line = trim(fgets($file));
}
if ($line === false) {
return false;
}
// Prepare and return the array
while ($line !== false && strlen($line) > 0) {
$pos = strpos($line, ":");
if ($pos != false) {
$key = trim(substr($line, 0, $pos));
$value = trim(substr($line, $pos + 1));
$book[$key] = $value;
//echo $line . "\n";
$line = trim(fgets($file));
} else {
throw new \Exception("Erreur - Fichier mal écrit", 125);
}
}
return $book;
}
文本文件是:
couverture : scorpion.jpg
titre : La marque du diable
serie : Le Scorpion
auteurs : Marini - Desberg
année : 2000
catégorie : bandes-dessinées
couverture : BOB.jpg
titre : La marque du BOB
serie : Le BOB
auteurs : Marini - Desberg
année : 2000
catégorie : bandes-dessinées
在这个例子中调用函数 3 次时,应该 return 只有两本书。它现在所做的是 return 两本书并陷入无限加载循环。
你们能帮帮我吗?
此致
在 EOF,trim(fgets($fileHandle))
returns ""
而不是 false
开始时改变
$line = trim(fgets($file));
while ($line !== false && strlen($line) === 0) {
来自
$line = fgets($file);
while ($line !== false && strlen(trim($line)) === 0) {
$line = fgets($file);
}