我正在使用league/csv来解析csv
文件,然后将这些数据转储到数据库中。
结构如下:
$csv = Reader::createFromPath($csv_file_path, 'r');
$csv->setOutputBOM(Reader::BOM_UTF8);
$csv->addStreamFilter('convert.iconv.ISO-8859-15/UTF-8');
$csv->setHeaderOffset(0);
$csv_header = $csv->getHeader();
$loop = true;
while($loop){
$stmt = (new Statement())
->offset($offset)
->limit($limit)
;
$records = $stmt->process($csv);
foreach ($records as $record)
{
$rec_arr[] = array_values($record);
}
$records_arr = $service->trimArray($rec_arr);
if(count($records_arr)>0)
{
foreach($records_arr as $ck => $cv){
//map data and insert into database
}
}else{
$loop = false;
}
}
当前,我正在laravel队列中实现此逻辑。它可以成功插入整个数据集,但这不会停止该过程。
它总是被消息processing
所困扰。但是,如果我删除了该while
循环,它将以消息processed
停止。
所以,我认为应该在其中实施一些错误的逻辑。
正在寻找一个解决的办法。
答案 0 :(得分:0)
if(count($records_arr)>0)
此行可能始终评估为true
。
您的代码永远不会达到$loop = false;
结束条件。
答案 1 :(得分:0)
@stuart感谢您的评论。这是因为我以前有一个工作循环,该循环曾经用于多个ajax请求。但是,现在也有了队列,我已经将记录rec_arr放置在循环之外。在这里,我将此数组初始化放置在while循环中,并且工作得很好。