我有一个通过外部文件FGETS的while循环,然后在每一行上执行函数a()。
我想做的是先看第一行。如果该行符合某些条件,我想用它执行函数b(),然后让while循环在第2行+上运行a()函数。
如果第一行与标准不匹配,那么我希望while循环在1+行上运行a()函数。
这是否可以,而无需再次关闭并重新打开文件?
答案 0 :(得分:4)
阅读第一行后,您可以使用fseek
将文件指针重置为文件开头fseek($file,0);
答案 1 :(得分:0)
绝对。这是一种方式:
if (($line = fgets(...)) !== false)
{
if (meets_criteria($line))
{
b($line);
}
else
{
a($line);
};
while (($line = fgets(...)) !== false)
{
a($line);
};
};
随时修复发现的任何错误。
答案 2 :(得分:-1)
如果文件不是太大而无法读入内存,您可以使用file()
而不是像这样的FGETS
$lines = file('the-data.file');
foreach($lines as $line){
if (meets_criteria($line))
{
b($line);
a(implode(array_slice($lines,2)));
}
else
{
a(implode($lines));
};
};