Я не уверен, возможно ли это, я гуглил для решения... Но по существу у меня есть очень большой файл, строки которого я хочу сохранить в массиве. Таким образом я использую файл (), но являюсь там способом сделать это в пакетах? Так, чтобы каждый, скажем, 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 всегда будут равны... Так или иначе чувство запутано... Кто-то может помочь мне думать немного более ясный?
Вы никогда не увеличивали $ 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);
Прочитайте файл построчно столько строк, сколько вам нужно, добавляя каждую строку в массив. Когда массив достигнет нужной длины, обработайте его и очистите массив. Например:
$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);
}
Если под словом "пауза" вы подразумеваете, что действительно хотите приостановить выполнение вашего скрипта, используйте sleep или некоторые его варианты: http://php.net/manual/en/function.sleep.php