目的
ほとんどタイトルのとおりです。
現在、データベースから取得したデータが3次元連想配列に格納されており、それをCSVファイルに書き出したいです。
わからない点
Webでいろいろと検索してみたところ、2次元配列をCSVに書き出す方法はいろいろあっても3次元配列を書き出す方法については見当たりませんでした。
もちろん、その2次元配列を書き出す方法を応用すれば、目的は達成できるとは思い、色々と試してはみましたがうまく行きません。
また、そもそもテーブルは2次元なのにクエリの実行結果が3次元配列に格納されているというのがおかしいのかなと思いましたが、
自分の書いているコードではどうしても3次元連想配列に格納されるようです。
極端に複雑でなければどんなロジックでも構いませんので、解決策をご存知の方、ぜひご教授お願いいたします。
参考にしたサイト
具体的なコードなど
実際に扱っているコードの一部を編集したものなので、もしかするとコード内容とdebug()内容に矛盾があるかもしれませんが、イメージとして捉えていただければありがたいです…
- ExportTableModel.php
php
1 function select(){ 2 $sql = <<<EOD 3 SELECT 4 * 5 FROM 6 table1 7 INNER JOIN 8 table2 9 ON table1.id = tabe2.id 10EOD; 11 return $this->query($sql, false); // この取得方法だと3次元連想配列に格納される -> 何か別の方法がある? 12 }
- ExportTableController.php
php
1 2class ExportTableController extends AppController { 3 public $uses = array('ExportTableModel'); 4 public $components = array('Common'); 5 6 public $autoLayout = false; 7 8 public function index() { 9 $table = $this->ExportTableModel->export(); // 上記のfunctionを実行 10 $this->set(compact("table")); 11 } 12 } 13}
- index.ctp(ほとんど載せる意味ないですね…)
php
1<?php 2 $assoc_data = array( 3 array('name' => '佐藤', 'address' => '東京都', 'old' => '29歳'), 4 array('name' => '田中', 'address' => '千葉県', 'old' => '31歳'), 5 array('name' => '鈴木', 'address' => '北海道', 'old' => '54歳') 6 ); 7 $csv_header = array( 8 9 ); 10 11 header('Content-Type: application/octet-stream'); 12 header('Content-Disposition: attachment; filename=data.csv'); 13 14 $stream = fopen('php://output','w'); 15 fputcsv($stream, $csv_header); 16 17 foreach($table as $key => $assoc_row){ 18 $numeric_row = array(); 19 foreach ($csv_header as $header_name){ 20 mb_convert_variables('SJIS-win', 'UTF-8', $assoc_row[$header_name]); 21 $numeric_row[] = $assoc_row[$header_name]; 22 } 23 fputcsv($stream, $numeric_row); 24 } 25?>
- debug($table)
array( (int) 0 => array( 'table1' => array( 'id_1' => '001', 'family_name' => 'yamada' ), 'table2' => array( 'id_1' => '001', 'id_2' => '001', 'first_name' => 'taro' ) ), (int) 0 => array( 'table1' => array( 'id_1' => '001', 'family_name' => 'yamada' ), 'table2' => array( 'id_1' => '001', 'id_2' => '002', 'first_name' => 'jiro' ) ) )
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/09 05:22
2017/05/09 05:30