Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-fgets-读取第一行两次?_Php_Fgets - Fatal编程技术网

php-fgets-读取第一行两次?

php-fgets-读取第一行两次?,php,fgets,Php,Fgets,我有一个while循环,它通过一个外部文件进行设置,然后在每一行上执行函数a() 我想做的是先看第一行。如果该行满足某些条件,我想用它执行函数b(),然后让while循环在第2+行上运行a()函数 如果第一行与条件不匹配,那么我希望while循环在第1+行上运行a()函数 无需再次关闭和重新打开文件,是否可以执行此操作?读取第一行后,可以使用 当然。这里有一个方法: if (($line = fgets(...)) !== false) { if (meets_criteria($line)

我有一个while循环,它通过一个外部文件进行设置,然后在每一行上执行函数a()

我想做的是先看第一行。如果该行满足某些条件,我想用它执行函数b(),然后让while循环在第2+行上运行a()函数

如果第一行与条件不匹配,那么我希望while循环在第1+行上运行a()函数


无需再次关闭和重新打开文件,是否可以执行此操作?

读取第一行后,可以使用


当然。这里有一个方法:

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));
  };
};