1

我目前正在使用 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%
    )

 )

希望我清楚。
谢谢你的时间。

4

1 回答 1

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']], ...
 }

当然,使用参数化值符合您的最大利益。

于 2012-10-12T05:02:45.110 回答