Используя файл () инкрементно?

Я не уверен, возможно ли это, я гуглил для решения... Но по существу у меня есть очень большой файл, строки которого я хочу сохранить в массиве. Таким образом я использую файл (), но являюсь там способом сделать это в пакетах? Так, чтобы каждый, скажем, 100 строк, которые это создает, это "приостановилось"?

Я думаю, что, вероятно, будет что-то, что я могу сделать с циклом 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 и $j всегда будут равны... Так или иначе чувство запутано... Кто-то может помочь мне думать немного более ясный?

1
задан Justin Johnson 24 May 2010 в 01:22
поделиться

3 ответа

Вы никогда не увеличивали $ 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);
0
ответ дан 3 September 2019 в 00:20
поделиться

Прочитайте файл построчно столько строк, сколько вам нужно, добавляя каждую строку в массив. Когда массив достигнет нужной длины, обработайте его и очистите массив. Например:

$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);
}
2
ответ дан 3 September 2019 в 00:20
поделиться

Если под словом "пауза" вы подразумеваете, что действительно хотите приостановить выполнение вашего скрипта, используйте sleep или некоторые его варианты: http://php.net/manual/en/function.sleep.php

0
ответ дан 3 September 2019 в 00:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: