我正在将CSV文件导入数据库,这是一个多步骤的过程。PHP CSV导入问题
步骤如下:
- 步骤1:用户上传CSV文件。
- 第2步:用户将数据关联到数据类型。例如,如果CSV中的记录包含以下数据:
John,Doe,[email protected]
,则用户将从下拉框中选择名字以与数据值John关联,与关联到数据值Doe的下拉框关联的姓氏以及来自某个数据值的电子邮件地址下拉框,联营的数据值[email protected] - 步骤3:将数据插入数据库
我的问题有以下几点:
1 /第3步,我会在我拥有用户选择的列和原始数据。
这里是原来的数据是这样的:
$data = array(
0 => array('John','Doe','[email protected]'),
1 => array('Foo','Bar','[email protected]')
);
这里就是我的列从第2步选择的样子:
$columns = array('firstname','lastname','emailaddress')
如何创建一个SQL查询,可像下面这样:
INSERT into contacts (id,firstname,lastname,emailaddress) values (null,'John','Doe','[email protected]')
正如你所看到的,sql查询具有按照它们在数组中的顺序选择的列,然后是值。我在想,既然列是按照数据的顺序选择的,我可以假设数据的顺序是正确的,并与该位置的特定列相关联(例如,我可以假设数据值' John'与列数组的第一个位置关联,反之亦然)。
2. /我在考虑一种可能的情况,即当用户进行文件的初始上传时,他们可能会发送一个csv文件,其中第一个记录具有空白字段。问题是,我根据csv记录中的列数来确定用户与数据关联的列数。在这种情况下,我们有2列,每个后续记录有3列。那么,我不打算遍历整组记录来确定正确的列数。我该如何解决这个问题?有任何想法吗?
编辑
我想我找到了答案回答问题2 CSV文件的解析,我可以为每个记录,并在解析结束最高计数的计数是我的计数。好像?有什么问题呢?
我没有谈及你的第二个问题,但你的解决方案是我想要的。伪代码:如果numFieldsCurrLine> maxFieldsSeen,则maxFieldsSeen = numFieldsCurrLine; –