我不确定这是否可行,我一直在谷歌搜索解决方案......但是,基本上,我有一个非常大的文件,我想要存储在一个数组中。因此,我正在使用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永远是平等的...无论如何,感觉很混乱......有人能帮助我认为一个人更清楚吗?
答案 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