我正在编写PHP脚本以将CSV文件导入MySQL表。
我的问题是字段用逗号分隔,但有些字段是在一个额外的逗号或双引号内(我发现了双引号的解决方案),但不是额外的逗号。 这是一个例子:
SORT_COLUMN,SORT_ALPHA,GUEST_NAME,PROFILE_ID,FULL_ADDRESS,IS_TOTAL_YN
0,DIAZ REBOLLO ANGELICA,Diaz Rebollo Angelica,824990,"Blvd. Manuel Avila Camacho 36, piso 10 Lomas de Chapul DF 11000"
正如您在FULL ADDRESS字段中所见:
"Blvd. Manuel Avila Camacho 36, piso 10 Lomas de Chapul DF 11000"
在36之前加上"
和逗号,
这是PHP CODE的一部分:
$lineseparator = "\n";
foreach(explode($lineseparator,$csvcontent) as $line) {
$lines++;
$line = trim($line," \t");
$line = str_replace("\r","",$line);
// Here I remove double quotes in the csv file
$line = str_replace(""",'',$line);
$linearray = explode($fieldseparator,$line);
$linemysql = implode("','",$linearray);
$query = "insert into $databasetable values('$linemysql');";
$queries .= $query . "\n";
@mysql_query($query);
}
答案 0 :(得分:2)
fgetcsv - 这是标准PHP库的一部分 - 是你的朋友。
嗯,大部分时间。当然,请注意$escape
参数,这是奇怪的,无用的,破坏的。你需要传递0
(注意:文字整数为零,而不是PHP中的任何其他零事物)来禁用它。
答案 1 :(得分:1)
通常,使用csv,我使用;
作为字段分隔符,使用\n
作为行分隔符。
通常,您会在字段中遇到,
,这就是;
更适合分离的原因。
编辑:
由于您的地址字段由"
括起,您可以使用以下内容:
$line = '0,DIAZ REBOLLO ANGELICA,Diaz Rebollo Angelica,824990,"Blvd. Manuel Avila Camacho 36, piso 10 Lomas de Chapul DF 11000"';
preg_match('/".*"/', $line, $matches);
$address = $matches[0];
$data = explode(',', $line);
$data[4] = $address;
var_dump($data);