我目前正在使用php阅读excel并将这些记录存储在 mysql 中。我遇到了PHPExcel,这是一个非常好的插件类,可以很容易地帮助实现它。我尝试过搜索但没有类似于我的用例。另外,不是很擅长面向对象的PHP ,我没有时间这样做。
First Name Last Name Nationality Gender Date of Birth Time of Birth Date/Time PHP Coder Sanity %Age
以上是我的excel表格中的示例数据库列和第一行。我希望在将行插入数据库之前匹配行的列名。 我的代码到现在为我提供了一个二维数组,我在其中获取列名和值。我想在插入之前检查列名称的原因是,我的excel可以是列名的任何顺序。 我在包中使用了exampleReader01和一些SO引用来实现这一点。
$headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true);
$headingsArray = $headingsArray[1];
$r = -1;
$namedDataArray = array();
for ($row = 2; $row <= $highestRow; ++$row) {
$dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true);
if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
++$r;
foreach($headingsArray as $columnKey => $columnHeading){
$namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey];
}
}
}
现在我想要一些帮助,如何在右栏中插入它。 我的数组是这样的
Array
(
[0] => Array
(
[First Name] => Mark
[Last Name] => Baker
[Nationality] => British
[Gender] => M
[Date of Birth] => 19-Dec-60
[Time of Birth] => 1:30
[Date/Time] => 22269.0625
[PHP Coder] => 1
[Sanity %Age] => 32%
)
[1] => Array
(
[First Name] => Toni
[Last Name] => Baker
[Nationality] => British
[Gender] => F
[Date of Birth] => 24-Nov-50
[Time of Birth] => 20:00
[Date/Time] => 18591.83333
[PHP Coder] =>
[Sanity %Age] => 95%
)
[2] => Array
(
[First Name] => Rachel
[Last Name] => Baker
[Nationality] => British
[Gender] => F
[Date of Birth] => 7-Dec-82
[Time of Birth] => 0:15
[Date/Time] => 30292.01042
[PHP Coder] =>
[Sanity %Age] => 100%
)
)
希望我很清楚
谢谢你的时间。
答案 0 :(得分:1)
如果我可以假设您的Excel列标题名称永远不会更改,为什么不简单地使用映射数组?
$dbMapping = array(
'col1' => header1,
'col2' => header2,
..
'colN' => headerN
);
因此,当您准备插入数据库时,使用2D数组中已有的列标题名称遍历每一行并将其传递到映射数组,即$ dbMapping ['col1'],这将是得到你的标题名称,你可以获取正确的行值。
伪
foreach ($rows as $row) {
insert into col1, col2, ... colN
values ($rows[$dbMapping['col1']], $rows[$dbMapping['col2']], ...
}
当然,使用参数化值符合您的最佳利益。