逐步使用file()?

时间:2010-05-24 01:07:02

标签: php file arrays batch-file

我不确定这是否可行,我一直在谷歌搜索解决方案......但是,基本上,我有一个非常大的文件,我想要存储在一个数组中。因此,我正在使用file(),但有没有办法批量执行此操作?所以它创造的每一条线路都会“暂停”吗?

我认为我可以用foreach循环或其他东西做些什么,但我不确定我是否正确地考虑它......

喜欢

$i=0;
$j=0;
$throttle=100;

foreach($files as $k => $v) {
  if($i < $j+$throttle && $i > $j) {
     $lines[] = file($v);
     //Do some other stuff, like importing into a db
  }
  $i++;
  $j++;
}

但是,我认为这不会起作用,因为$ i&amp; $ j永远是平等的...无论如何,感觉很混乱......有人能帮助我认为一个人更清楚吗?

3 个答案:

答案 0 :(得分:2)

逐行读取文件,无论您需要多少行,都要将每行附加到数组中。当数组达到所需长度时,处理它并清空数组。 E.g:

$handle = @fopen("/tmp/inputfile.txt", "r");
$throttle = 100;
$data = array();
if ($handle) {
    while(!feof($handle)) {
        $buffer = fgets($handle, 4096);
        $data[] = $buffer;
        if(count($data) == $throttle) {
            doSomething($data);
            $data = array();
        }
    }
    fclose($handle);
}

答案 1 :(得分:0)

你永远不会增加$ i或$ j ......你可以做的是:

    $data = array();
    $chunk = 100;
    $f = fopen($file, 'r');
    while (!feof($f)) {
        for ($i = 0; $i < $chunk; $i++) {
            $tmp = fgets($f);
            if ($tmp !== false) {
                $data[] = $tmp;
            } else {
                //No more data, break out of the inner loop
                break;
            }
        }
        //Process your data


        $data = array();
    }
    fclose($f);

答案 2 :(得分:0)

如果通过“暂停”,您的意思是您真的想暂停脚本的执行,使用睡眠或其某些变体:http://php.net/manual/en/function.sleep.php