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シートの最初の行です。データベースに挿入する前に、行の列名を一致させたいと思います。これまでの私のコードは、列名と値を取得する2次元配列を提供します。挿入する前に列名を確認したい理由は、私の優れた点は列名の任意の順序である可能性があるためです。これを実現するために、パッケージで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 に答える