質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

7319閲覧

連想配列にした中身を全てCSVファイルで出力したい

nabex

総合スコア66

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2016/10/21 10:49

編集2016/10/21 11:11

お疲れ様です。
laravel5で連想配列にした中身を全てCSVファイルに出力したいのですが、以下のように文字化けしてしまいます。
ファイルを開いていったんヘッダーを書き込んでから閉じて、またファイルを開いて今度は中身を書き込むというやり方を試しても同じ結果になりました。

文字化けと重複して表示されているようなのですが、期待値のように表示させるにはどのようにしたらよろしいでしょうか。
よろしくお願い致します。

現状のCSVの出力結果
名前 年齢 仕事
tamura 25 エンジニア
???O ?N?? ?d??
tamura 25 ?G???W?j?A
suzuki 23 介護士
???O ?N?? ?d??
tamura 25 ?G???W?j?A
suzuki 23 ???m
maki 29 レストラン

CSVとして出力させたい期待値
名前 年齢 仕事
tamura 25 エンジニア
suzuki 23 介護士
maki 29 レストラン

lang

1 2class StudyController extends Controller 3{ 4 public function index() 5 { 6 $users[] = array('name'=>'tamura', 'age'=>'25', 'job'=>'エンジニア'); 7 $users[] = array('name'=>'suzuki', 'age'=>'23', 'job'=>'介護士'); 8 $users[] = array('name'=>'maki', 'age'=>'29', 'job'=>'レストラン'); 9 10 $file = fopen('C:\xampp\htdocs\laravel\app\common\sample.csv', 'a'); 11 $csv='名前, 年齢, 仕事'; 12 $csv.="\n"; 13 foreach($users as $user){ 14 //echo $user['name'] . 'さんは' . $user['age'] . "歳です。" . $user['job'] . "をしています。\n"; 15 16 $csv.= $user['name']; 17 $csv .= ','; 18 $csv.= $user['age']; 19 $csv .= ','; 20 $csv.= $user['job']; 21 22 $csv.="\n"; 23 24 25 $csv = mb_convert_encoding($csv, 'SJIS', 'UTF-8'); 26 27 fputs($file, $csv); 28 } 29 fclose($file); 30 31}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純にループ内の$csvの初期化もれだと思いますよ
なので、同じ値を何度もUTF-8からSJISにエンコードしちゃって文字化けしているようです。

php

1 foreach($users as $user){ 2 3 $csv = '' // 初期化 4 $csv.= $user['name']; 5 $csv .= ','; 6 $csv.= $user['age']; 7 $csv .= ','; 8 $csv.= $user['job']; 9 $csv.="\n"; 10 $csv = mb_convert_encoding($csv, 'SJIS', 'UTF-8'); 11 fputs($file, $csv); 12}

※余談ですが、Windows向けならSJISよりSJIS-WINの方がいいかもしれませんよ。

投稿2016/10/21 13:07

編集2016/10/21 13:13
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nabex

2016/10/21 13:46

ありがとうございます!無事に解決出来ました。初期化は完全に見落としてました。そうなんですね。WindowsなのでSJIS-WINにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問