提问人:crosenblum 提问时间:10/5/2021 更新时间:10/5/2021 访问量:38
PHP 导入 csv 时获得准确的记录计数
PHP Get accurate record count when importing csv
问:
我有一个函数,在我的类中处理 3 条数据。
- 要解析的文件名
- 替换字符串,这基本上是插入或替换文本,但值除外。
- 用于保存数据或删除以获取新数据的 TableName。
我主要关心的是,我可以通过此功能获得新记录/调整记录的准确计数
下面是此函数的代码。
/**
* @return int|string
*
* @psalm-return 0|positive-int|string
*/
private function csvimport(string $filename,string $replace, string $tablename) {
// verify file exists
if (!file_exists($filename)) {
// return error message
return 'File not found at '.$filename;
}
// set counter
$counter = 0;
$headcount = 0;
// now read file line by line skipping line 1
$file = fopen($filename, 'r');
while (($line = fgetcsv($file)) !== FALSE) {
// check if counter is greater than zero
if ($counter > 0) {
// get number of columns in this line
$colcount = count($line);
// replace inside array?
$line = str_replace('"','',$line);
// convert array to comma-delimmited
$values = '"'.implode('","', $line).'"';
// compare colcount to headcount
while ($colcount < $headcount) {
// add comma to the end of values
$values .= ',';
// get new colcount
$colcount = count($values);
}
// create sql string
$sql = $replace.$values.',"","","","")';
// send this to do an update
$res = array();
$res = $this->sql_update($sql);
// get num rows and status
$status = $res[0];
$num_rows = $res[1];
// assemble status string
$status = $status . ' [# Of Rows '.$num_rows.']';
// do sql tracker
$this->sqltracker($sql);
$this->sqltracker($status);
} else {
// count number of columns in header
$headcount = count($line);
}
// increment counter
$counter++;
// reset colcount
$colcount = 0;
}
// close file
fclose($file);
// return
return $counter;
}
答:
0赞
M3Ali
10/5/2021
#1
问题是你把数组处理成字符串,把字符串处理成数组。 在这里,您将数组作为字符串进行处理:
$line = str_replace('"','',$line);
我认为这应该是:
foreach($line as &$clm){
$clm=str_replace('"','',$clm);
}
在这里,您将字符串作为数组进行处理:
$colcount = count($values);
将其更改为:
$colcount++;
由于您没有展示sql_update函数的实现,因此我们无法预料您编写如下代码的原因: $sql = $replace.$values.',“”,“”,“”,“”)';
评论
0赞
crosenblum
10/5/2021
主要问题是 $counter++;这就是我为获取 csv 中解析的行数所做的,但它始终处于关闭状态。每天我都会生成新的 csv,但代码没有显示正在更新/插入的数据。
评论