我需要解析硬 csv 文件并将其放入 MySQL。
1.csv:
"col1,""col21, col22, col23"",""col3"",""col41, col42""
我的测试php脚本文件:
<?php
$connection = mysql_connect('127.0.0.1:3307','a','') or die ("Unable to connect!");
mysql_select_db('test') or die ("Unable to select database!");
mysql_query('SET NAMES utf8');
$fp = fopen("1.csv", "r") or die("Couldn't open filename");
while (($data = fgetcsv($fp, 0, ",", "'")) !== FALSE)
{
$import="INSERT INTO iptable(col1,col2,col3,col4) values('$data[0]','$data[1]','$data[2]','$data[3]')";
mysql_query($import) or die(mysql_error());
}
fclose($fp);
echo '<b>Successfully added to DB</b>';
?>
我需要插入iptable值(' col1 ',' col21,col22,col23 ',' col3 ',' col41,col42 ')。我怎样才能做到呢?(如何正确区分它们?).
我的csv文件不正确,但我需要从中解析数据。到 iptable(col1,col2,col3,col4)。(4列)
例如,Excel可以正确地将这个csv文件转换为列。(http://goo.gl/xm0bly)
这是 foreach 语句中一些函数(explode、str_replace)和一些逻辑的轻微混合,但给定您的输入将按预期输入数据:
while (($data = fgetcsv($fp, 0, ",", "'")) !== FALSE)
{
$array=explode('""', $data);
$line=array();
foreach($array as $val)
{
if(trim($val)!="," && trim($val))
{
$line[]=str_replace('"', '', $val);
}
}
$import="INSERT INTO iptable(col1,col2,col3,col4) values('$line[0]','$line[1]','$line[2]','$line[3]')";
mysql_query($import) or die(mysql_error());
}
根据问题中所示的输入,$line
数组如下所示:
Array
(
[0] => col1,
[1] => col21, col22, col23
[2] => col3
[3] => col41, col42
)
编辑:根据您的输入字符串,以下代码输出以下文本:
<?php
$string='"col1,""col21, col22, col23"",""col3"",""col41, col42"" ';
echo "String input:\r\n".$string."\r\n";
$array=explode('""', $string);
$line=array();
foreach($array as $val)
{
if(trim($val)!="," && trim($val))
{
$line[]=str_replace('"', '', $val);
}
}
echo '$line variable is currently:'."\r\n";
print_r($line);
?>
输出:
String input:
"col1,""col21, col22, col23"",""col3"",""col41, col42""
$line variable is currently:
Array
(
[0] => col1,
[1] => col21, col22, col23
[2] => col3
[3] => col41, col42
)
您可以使用LOADDATA语句将CSV数据直接存储到MYSQL中,而不是使用PHP读取CSV文件并存储INTO DB。