我正在将 CSV 文件导入数据库,这是一个多步骤的过程。
以下是步骤:
- 第 1 步:用户上传 CSV 文件。
- 第 2 步:用户将数据与数据类型相关联。例如,如果 CSV 中的记录包含以下数据:
John,Doe,jondoe@gmailcom
,用户将从下拉框中选择 firstname 以与数据值 John 关联,从下拉框中选择 lastname 与数据值 Doe 关联,并从下拉列表中选择 emailaddress与数据值 johndoe@gmail.com 关联的框 - 第三步:将数据插入数据库
我的问题如下:
1./ 在第 3 步,我将拥有用户选择的列和原始数据。
以下是原始数据的样子:
$data = array(
0 => array('John','Doe','johndoe@gmail.com'),
1 => array('Foo','Bar','foobar@gmail.com')
);
这是我从第 2 步中选择的列的样子:
$columns = array('firstname','lastname','emailaddress')
如何创建如下所示的 sql 查询:
INSERT into contacts (id,firstname,lastname,emailaddress) values (null,'John','Doe','johndoe@gmailcom')
如您所见,sql 查询按照它们在数组中的顺序选择列,然后是值。我在想,由于列是按数据的顺序选择的,我可以假设数据的顺序正确并且与该位置的特定列相关联(例如,我可以假设数据值' John' 与 columns 数组的第一个位置相关联,反之亦然)。
2./我在考虑一种可能的情况,当用户首次上传文件时,他们可能会发送一个 csv 文件,其中第一条记录有一个空白字段。问题是,我根据 csv 记录中的列数确定让用户与数据关联的列数。在这种情况下,我们有 2 列,每个后续记录都有 3 列。好吧,我不打算遍历整个记录集来确定正确的列数。我该如何解决这个问题?有任何想法吗?
编辑
我想我找到了问题 2 的答案。在解析 csv 文件时,我可以获得每条记录的计数,解析结束时的最高计数是我的计数。看起来对吗?有什么问题吗?