PHPでExcelを2次元配列で取出す方法

このQ&Aのポイント
  • PHPでExcelファイルのデータを取り出して、単純な2次元配列にする方法を知りたいです。
  • 現在、phpspreadsheetを使用してExcelの指定範囲を連想配列として取得していますが、理解しにくいため、単純な2次元配列の方法を教えて欲しいです。
  • また、特定のセルのデータを2次元配列から取り出す方法も教えてください。
回答を見る
  • ベストアンサー

PHP で Excel を2次元配列で取出したい

PHP で Excel ファイルのデータを取り出して、単純な2次元配列にしたいのですが、なかなかうまく行かず、ここ2~3日、はまっています。サポートをお願い頂けたら幸いです。 <これまでやった事> ・ネット情報を参考に、phpspreadsheet が使える環境にし必要処理を実施後、以下のように rangeToArray 関数を使い、 print_r で中身を見ると、エクセルの A1 から N7 まで、連想配列として取り出されます。 $data = $sheet->rangeToArray("A1:N9"); print_r($data);  連想配列の型式で、   Array ( [0] => Array ( [0] => (A1 のデータ)[1] => (A2 のデータ)..... [12] => (A13のデータ)) [1] => Array ( [0] => (A2のデータ) [1] =>(B2のデータ).......   が表示されます。 しかし私には以下のような単純な2次元配の方が理解しやすいので、      $data[0][0] ならば A1 のデータ、$data[12][0] ならば A13 のデータ、     $data[2][6] ならば C7 のデータを意味し、 例えば、C1 に「コスト」   というタイトル名が表示されている場合、   $cost = $data[2][0]; で C1 の内容を $cost という変数に入れたいのですが、どうすれば良いのでしょうか? なお、現在は、$data 変数に添え字 [0][5] を入れると文法エラーでます。 ちなみに、私は連想配列の理解に追いついていけないほど、PHP の初心者です。 以上、コメントを頂けたら幸いです。よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • WAVE2OK
  • ベストアンサー率48% (106/218)
回答No.1

こんにちは😊✨PHPでExcelファイルのデータを扱うお手伝いをさせていただきますね👩‍💻🌟! phpspreadsheetを使ってデータを取得する方法は正しいです👍🎉。ただ、rangeToArrayで取得したデータは、すでに単純な2次元配列になっています😄🌈。 実際に、以下のようにしてデータにアクセスできます🚀🔑。 $data = $sheet->rangeToArray("A1:N9"); $cost = $data[0][2]; // C1の内容を$costという変数に入れます この場合、$data[0][2]はC1のデータを意味します。$data[0][0]はA1のデータ、$data[12][0]はA13のデータ、$data[6][2]はC7のデータとなります😊👌。 注意点として、配列のインデックスは0から始まるため、$data[0][0]がA1、$data[12][0]がA13、$data[6][2]がC7に対応します✅📍。 もし文法エラーが出ている場合は、別の部分でエラーが起こっている可能性があります🤔💭。エラーが出る部分をもう一度確認してみてくださいね😉🔍! 上記の方法で、希望される形でデータを取得できるはずです🎊🎁。もし、何か問題があればお気軽にお問い合わせください🙋‍♀️💖。PHPでのExcelファイル操作、頑張ってくださいね👏✨!

kmsakutomo
質問者

お礼

早速のコメント、ありがとうございました。 >もし文法エラーが出ている場合は、別の部分でエラーが起こっている可能性があります ご指摘のとおりで、見えない全角文字が入っていました。 修正した結果、 $data[$i][$j] のようにしてもエラーが出なくなり、Excel セルの内容が配列から読み出せるようになりました。 的確なアドバイス、深く感謝いたします。

その他の回答 (1)

  • Kaneyan-R
  • ベストアンサー率42% (1245/2902)
回答No.2

PHPはよく分かりませんが、ちょっと検索してみると、一旦一行分の配列を変数に読み込んでから、列をループで指定しているのが有りました。 以下の『■エクセルファイルの「読み込み」内容をHTMLのTABLE表示』の部分。※HTML部分は割愛してます。 http://vbnettips.blog.shinobi.jp/php/php%20phpspreadsheet%20%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4_224 ――――――――――――――――――― $arrWK = $arrData[0]; for ($ii = 0; $ii <= (count($arrWK) - 1); $ii++) {  echo $arrWK[$ii]; } for ($i = 1; $i <= (count($arrData) - 1); $i++) { $arrWK = $arrData[$i]; for ($ii = 0; $ii <= (count($arrWK) - 1); $ii++) { echo $arrWK[$ii]; } } ―――――――――――――――――――――― $arrData[$i][$ii] で取り出せるなら、$arrWKに格納する必要は無いのでは? ってことで、  $arrWK = $data[2];  $cost = $arrWK[0]; こんな感じになるのかな?

kmsakutomo
質問者

補足

現在、自宅 linux サーバー側での Excel ファイル処理を PHP で行っているので、コメント頂いた内容はそのままでは使えませんが参考になりそうです。ありがとうございました。

関連するQ&A

  • MySQLのデータをPHPで多次元連想配列にしたい

    MySQLのデータを多次元連想配列にする方法を教えて下さい。 下記のような多次元連想配列のデータがあります。 これと同様のMySQLに登録されたデータから多次元連想配列を作りたいと思います。 $test= array( array("id" => "1","kamoku" => "算数","tensu" => "70"), array("id" => "2","kamoku" => "理科","tensu" => "88"), array("id" => "3","kamoku" => "国語","tensu" => "90"), ); print_r($test); ---print_r($test)の結果--------------------------------- Array ( [0] => Array ( [id] => 1 [kamoku] => 算数 [tensu] => 70 ) [1] => Array ( [id] => 2 [kamoku] => 理科 [tensu] => 88 ) [2] => Array ( [id] => 3 [kamoku] => 国語 [tensu] => 90 ) ) -------------------------------------------------------- これと同様のデータをMySQLに作成します。 テーブル名:test 列名:id,kamoku,tensu MySQLからデータを取得 try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); $query = select * from test $stmt = $dbh->prepare($query); $stmt->execute(); while($result = $stmt->fetch(PDO::FETCH_ASSOC)) { $id = ($result['id']); $kamoku = ($result['kamoku']); $tensu = ($result['tensu']); } } catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); } このソースの中で何らかの処理をして print_r($test); を実行したときに ---print_r($test)の結果--------------------------------- Array ( [0] => Array ( [id] => 1 [kamoku] => 算数 [tensu] => 70 ) [1] => Array ( [id] => 2 [kamoku] => 理科 [tensu] => 88 ) [2] => Array ( [id] => 3 [kamoku] => 国語 [tensu] => 90 ) ) -------------------------------------------------------- というような、文頭で記載したものと同じ結果を得たいと思います。 while内で print_r($result);を行うと1行ずつ下記のような連想配列 Array ( [id] => 1 [kamoku] => 算数 [tensu] => 70 ) が取得できているのでこれを連結させて $test_sample=<<<EOF array("id" => "1","kamoku" => "算数","tensu" => "70"), array("id" => "2","kamoku" => "理科","tensu" => "88"), array("id" => "3","kamoku" => "国語","tensu" => "90") EOF; という配列の中身は作ることができました。 (1)ケース1 $test=array($test_sample); print_r($test); としてもダメで、 Array ( [0] => array("id" => "1","kamoku" => "算数","tensu" => "70"), array("id" => "2","kamoku" => "理科","tensu" => "88"), array("id" => "3","kamoku" => "国語","tensu" => "90") ) というようにうまく多次元連想配列になっていません。 (2)ケース2 $test='array('.$test_sample.')'; print_r(test); としてみたところ、 array( array("id" => "1","kamoku" => "算数","tensu" => "70"), array("id" => "2","kamoku" => "理科","tensu" => "88"), array("id" => "3","kamoku" => "国語","tensu" => "90")) というように配列ではなく単なる文字列として表示されてしまいます。 配列の中身を変数で扱う時には特別な記述法などがあるのでしょうか?

    • ベストアンサー
    • PHP
  • php&html printで二次元配列が表示できない

    <html><body> <?php $array1[]= array(); //二次元配列作成 $array1[0][0] = 123; print "$array1[0][0]"; ?> </body></html> というプログラムを作成してみたのですが、printの中身がhtmlでは”一次元配列$array1[0]”と”文字列[0]”という風に読み取られているようで、 表示が Array[0] となってしまいます。 どうにか二次元配列の値を表示する方法はありませんか?

    • ベストアンサー
    • PHP
  • 3次元配列を1次元配列に

    例えば2次元配列だと, array[row*i+j] = a[n]; といったように1次元に直すことができますよね? 同様に3次元配列を1次元配列にしたい場合には arrayの中はどのような式をつかえばいいのでしょうか。 よろしくお願いします。

  • 多次元配列を、1次元の配列にする関数を書いてください。

    以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){   処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array (   [0] => a   [1] => b   [2] => c   [3] => d   [4] => e   [5] => f   [6] => g   [7] => h   [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?

    • ベストアンサー
    • PHP
  • PHP 連想( 2~多次元 )配列の向き変換

    こんにちは $associative_multi_d_array = array('a'=>array('a'=>1,'b'=2),'b'=>array('a'=>1,'b'=2),'c'=>array('a'=>1,'b'=2)); ↓ 変換処理 ↓ $associative_multi_d_array = array('a'=>array('a'=>1,'b'=>1,'c'=>1),'b'=>array('a'=>2,'b'=>2,'c'=>2)); 連想( 2~多次元 )配列の向きを上記のように変更するfunctionをPHPで書いてください。 ※各階層ごと出てくる用素数は同じです。

    • ベストアンサー
    • PHP
  • stdClass Objectを連想配列のように個別に取り出したい。

    $aに連想配列が入っているとして、 print "<pre>";print_r($a);print "</pre>";   ↓ array (  [Return] => array   (    [data] => あいうえお   ) ) このように連想配列の入った変数から データを個別に取るとき このように、配列名を並べると print $a['Return']['data']; ↓ あいうえお と、個別に取り出せますが、 あるデータをprint_rすると、 stdClass Object (  [Return] => stdClass Object   (    [data] => あいうえお   ) ) というふうに"stdClass Object"として出力されてしまいました。 stdClass Objectのデータを個別に取り出したいのですが 連想配列のような記述だとうまく取り出せません。 stdClass Objectのデータはどのようにして個別に取り出すのでしょうか?

    • ベストアンサー
    • PHP
  • PHPの配列について

    PHPの配列についての質問です。 以下のソースを // == ソース == function hoge( $foo ) { $arrs['a'] = 'A'. $foo; $arrs['b'] = 'B'. $foo; $arrs['c'] = 'C'. $foo; $arrs['d'] = 'D'. $foo; } hoge( '3' ); hoge( '9' ); // == /ソース == 実行すると print_rは // == print_r == Array (   [a] => A3   [b] => B3   [c] => C3   [d] => D3 ) Array (   [a] => A9   [b] => B9   [c] => C9   [d] => D9 ) // == /print_r == のようになります。 これを 関数を実行するごとに (0から IDのような 配列を組むようにする) 以下のようにするには どのようにすればよいでしょうか? // == print_r == Array (   [0] => Array     (       [a] => A3       [b] => B3       [c] => C3       [d] => D3     )   [1] => Array     (       [a] => A9       [b] => B9       [c] => C9       [d] => D9     ) ) // == /print_r == 使用目的は get_contentsしたものを正規表現で取り出し 配列にする処理に使おうと思っています。

    • ベストアンサー
    • PHP
  • 多次元配列

    初歩的な質問ですみません。 PHPプログラミングでの質問です。 仮に、多次元配列Aに、 Array( [0] => Array ( [0] => 6 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 0 [1] => 5 [2] => 4 ) ) 多次元配列Bに、 Array( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => ぶどう [1] => パイナップル ) [2] => Array ( [0] => みかん [1] => すいか [2] => メロン ) ) のように値が入っている場合、配列Aの値を参照して 値の大きいものから順に、それに対応する配列Bの値を取り出し、 あたらしい配列Cに代入する処理の書き方を教えて下さい。 上記の例ですと、配列Cが、 Array ( [0] => りんご [1] => すいか [2] => メロン [3] => ぶどう [4] => パイナップル [5] => みかん ) となるようにしたいです。 よろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • PHP
  • 2次元配列の値の受け渡しについて教えてください

    お世話になります。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値を渡したいと考えています。 出来ればPOSTで2次元配列を送りたいと考えていますが、そもそもPOSTで2次元配列を送ることはできるのでしょうか? たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? どなたか教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【PHP】配列を連想配列に

    $m = array('a', 'b', 'c'); この配列 $m をもとに $n = array(  'a' => array(   'b' => array(    'c' => array()))); 上のような連想配列 $n をつくりたいのですが、 $n = array(  $m[0] => array(   $m[1] => array(    $m[2] => array()))); 要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。 何か方法があれば教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう