php-fgets-读取第一行两次?
我有一个while循环,它通过一个外部文件进行设置,然后在每一行上执行函数a() 我想做的是先看第一行。如果该行满足某些条件,我想用它执行函数b(),然后让while循环在第2+行上运行a()函数 如果第一行与条件不匹配,那么我希望while循环在第1+行上运行a()函数php-fgets-读取第一行两次?,php,fgets,Php,Fgets,我有一个while循环,它通过一个外部文件进行设置,然后在每一行上执行函数a() 我想做的是先看第一行。如果该行满足某些条件,我想用它执行函数b(),然后让while循环在第2+行上运行a()函数 如果第一行与条件不匹配,那么我希望while循环在第1+行上运行a()函数 无需再次关闭和重新打开文件,是否可以执行此操作?读取第一行后,可以使用 当然。这里有一个方法: if (($line = fgets(...)) !== false) { if (meets_criteria($line)
无需再次关闭和重新打开文件,是否可以执行此操作?读取第一行后,可以使用
当然。这里有一个方法:
if (($line = fgets(...)) !== false)
{
if (meets_criteria($line))
{
b($line);
}
else
{
a($line);
};
while (($line = fgets(...)) !== false)
{
a($line);
};
};
请随意修复发现的任何错误。如果文件不是太大而无法读入内存,您可以使用
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));
};
};
你所说的第2行是什么意思?,你是指接下来的两行吗?我是指从第二行开始的所有行。第二行不就是第1行和第2行吗?你是说倒数第二、第三、第四行到最后一行吗?那就是所有还没读过的台词了?真是个好主意,哇。在我有机会看一下你的版本之前,我选择了下面的fseek答案。现在我很难过:))我的答案确实违反了,但它也适用于流。
$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));
};
};