Php 解析硬csv文件

Php 解析硬csv文件,php,mysql,parsing,csv,Php,Mysql,Parsing,Csv,我需要解析硬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 datab

我需要解析硬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文件不正确,但我需要解析其中的数据。到iptablecol1,col2,col3,col4。4列


例如,Excel可以正确地将此csv文件转换为列

您可以使用LOAD data语句直接将CSV数据存储到MYSQL中,而不是使用PHP读取CSV文件并将其存储到DB中。

这是一些函数explode、STRU replace和foreach语句中的一些逻辑的轻微混合,但如果您输入,将按预期将数据放入:

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);

?>

该csv似乎无效,您确定这是您所拥有的吗?csv文件中的双引号看起来非常奇怪?此外,如果文件包含每列的标题,则应跳过循环前的第一行。如果修复了CSV格式,则应能够使用LOAD DATA LOCAL Inflie将其加载到MySQL中。我认为,在进入CSV解析世界之前,需要执行以下操作:1。您需要一个更好的数据库模式:col21、col22、col23从一英里外就散发出糟糕的设计味道,col41、COL242也是如此。你需要生成一个更好的CSV,因为这个CSV已经超越了凌乱3。如果你不能做2,你必须定义一个更好的分隔符,因为逗号和双引号一样不明确。你考虑过phpMyAdmin的导入函数吗?是的,但你仍然必须告诉它CSV文件中的列是什么,不是吗?您仍然需要告诉它数据封装在什么内容中。在这种情况下,这将不起作用,因为csv文件的格式不正确。很抱歉,我需要用PHP完成此操作。@user3302786请参见编辑。代码使用您提供的字符串。我曾希望您能够将它合并到您自己的代码中,以读取中的变量。
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
)