🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

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

PHP

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

Q&A

解決済

2回答

935閲覧

PHPでcsvに既にあるデータの横に追加書き込みをする方法

sonnani1374

総合スコア15

CSV

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

PHP

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

0グッド

1クリップ

投稿2021/02/25 07:57

編集2021/02/25 11:09

phpでcsv出力を試みています。
①名前を書き込む
②追加書き込みモード(a)でそれぞれの名前の横に情報を書き込む

②の追加書き込みモードの時に1行目、2列目から書き込む方法はないものでしょうか?

完成イメージ
イメージ説明
https://gyazo.com/d7801185eb00a9788a42787410bf3dbc

現在の状態
イメージ説明
https://gyazo.com/e234954829af0b534858759fa625c63d

コード

$allNames=$allName; //名前を書き込み $data1 = mb_convert_encoding($allNames, 'SJIS-win', 'UTF-8'); $f=fopen("ichiran.csv","w"); fputs($f,$data1); fclose($f); $allDatas=$days."\n".$all; //それぞれの情報を追加書き込み $data2 = mb_convert_encoding($allsDatas, 'SJIS-win', 'UTF-8'); $f=fopen("ichiran.csv","a"); fputs($f,$data2); fclose($f); print("<a href='ichiran.csv' download>ここからダウンロード</a>");

何日も解決できておらず、困っております。
宜しくお願い致します。

$year = $_POST[year]; $month = $_POST[month]; $day = $_POST[day]; date_default_timezone_set('Asia/Tokyo'); define('TERM', $during);//1週間表示 $date_data=array(); $date = date($year."-".$month."-".$day);//今日の日付 //$date = date("2021-02-01");//今日の日付 print("名前"); for( $i=0; $i<TERM; $i++){ $timestamp = strtotime($i.' day ' . $date); $a=date('Y/m/d', $timestamp).",,,,"; print($a); $days=$days.$a; //$days=$days.$a."\n"; $date_data[] = date("Y-m-d", $timestamp); } print("<br>"); // ---------------------------------------------------------------------- $db=mysqli_connect("localhost","kunren_rensyu","2vFz44k@","admin_kunren"); //データベース名、ユーザ名、パスワード、利用するデータベース mysqli_set_charset($db,"utf8"); //文字化け対策 //print("接続完了"); /*名前取り出し*/ $query = "select no,sei,mei from suga_player where del_flg = 0"; $result = mysqli_query($db,$query) or die("クエリエラー".mysqli_error($db)); while($row = mysqli_fetch_array($result)) { $c=$row[sei].$row[mei].","; $allName=$allName.",".$c."\n"; print($allName); /*$all='';*/ for( $i=0; $i<TERM; $i++){ //名前IDと登録日が一致したデータ取り出し $query2 = "select student_no,torokubi,taion,reason,shukketu,other,hurigana from suga_shukketu where torokubi='".$date_data[$i]."'and student_no =".$row[0]." order by hurigana asc"; $result2 = mysqli_query($db,$query2) or die("クエリエラー".mysqli_error($db)); $row2 =mysqli_fetch_array($result2); $n=$i + 1; if($row2 == false) { $b="&nbsp;,&nbsp;,&nbsp;,&nbsp;,"; //$all=$all.$b."\n"; if(($n % $during) == 0){ $all=$all.$b."\n"; print($b); }else{ $all=$all.$b; print($b); } } else { if(($n % $during) == 0){ $br="\n"; $b=$row2[3].",".$row2[2].",".$row2[4].",".$row2[5].","; print($b); $all=$all.$b.$br; //$all=$all.$b."\n"; }else{ $b=$row2[3].",".$row2[2].",".$row2[4].",".$row2[5].","; print($b); $all=$all.$b; } } } print("<br>"); } //$alls='名前,'.$days."\n".$sei_mei.",".$all."\n"; /*$alls=$allName.$days."\n".$all; $data = mb_convert_encoding($alls, 'SJIS-win', 'UTF-8'); $f=fopen("ichiran.csv","w"); fputs($f,$data); fclose($f);*/ $allNames="\n".$allName; //名前を書き込み $data1 = mb_convert_encoding($allNames, 'SJIS-win', 'UTF-8'); $f=fopen("ichiran.csv","w"); fputs($f,$data1); fclose($f); $allDatas=$days."\n".$all; //それぞれの情報を追加書き込み $data2 = mb_convert_encoding($allDatas, 'SJIS-win', 'UTF-8'); $f=fopen("ichiran.csv","a"); fputs($f,$data2); fclose($f); print("<a href='ichiran.csv' download>ここからダウンロード</a>"); コード

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

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

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

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

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

kei344

2021/02/25 09:06

teratailでは画像もアップできますので、ご自信で所持されている画像であればそちらを使用されてはいかがでしょうか。(画像として質問文に表示されますし)
sonnani1374

2021/02/25 09:18

画像を挿入させていただきました! ご回答のいただけると幸甚です。 宜しくお願い致しま。
kei344

2021/02/25 09:31

$allName と $allsDatas を組み立てている部分のコードを提示されてはいかがでしょう。
sonnani1374

2021/02/25 11:10

ご指摘ありがとうございます! コードの全体像を追記させていただきました。 宜しくお願い致します!
guest

回答2

0

fopen の "w" "a" の働きをきちんと把握する必要があります。
一部編集的なことはできないのです。
編集したいときは全部読みだして、プログラムの変数上で編集して、さいご全部を上書きする
という手順になります。

日付でくくったデータ1セットが、追加書き込み1回分となるんですよね、おそらく。

fgetcsv

array_push

fputcsv

の流れでどうでしょう?

投稿2021/02/25 09:46

FromMZ1500

総合スコア496

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

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

sonnani1374

2021/02/25 09:55

ご回答ありがとうございます! $allNames=$allName; の中に名前がすべて入っており、 $allDatas=$days."\n".$all; の、 ・$dayに日付 ・$allに情報 がはいっているという形です。 僕の知識不足でもう分けありませんが、 この状態でもMZ1500様に頂いた記述で解決可能でしょうか、、、?
FromMZ1500

2021/02/25 10:10

・名前は増減しないし順番も固定されている ・データ($all)は必ず固定された名前順に基づいて並んでいる ときめつけてよいなら、解決可能です。
sonnani1374

2021/02/25 11:53

すみません。 array_pushについて調べてみたのですが、うまく理解ができなくて。 今回の場合ですと、array_push($allName.$all);といった理解で大丈夫でしょうか?
guest

0

ベストアンサー

CSV読込は不要で、データは揃ってるんですね。

$allNames = ",山田,\r\n,石原,\r\n,...
$days = "2021/2/14,,,,2021/2/15,,,,...
$all = "reason山田1,taion山田1,shukketu山田1,other山田1,reason山田2,taion山田2,shukketu山田2,other山田2,"
."reason石原1,taion石原1,shukketu石原1,other石原1,reason石原2,taion石原2,shukketu石原2,other石原2,...

こういう状態で。

取出し方(SQL)やその後の処理がスマートではないですが、
そこから変えてるとキリないので。
上の3つの変数のまま、とりあえず動く形にして、
それから理解しながらのさかのぼっての手直しがよいと思います。

以下のコードでどうでしょう?(エラー処理は省いてます)

php

1//Data整形 2$allNames_array = explode("\r\n", str_replace(",", "", $allNames)); 3$days_line = ",".$days."\r\n"; 4$all_array = explode(",", $all); 5$all_line_array = array_chunk($all_array, TERM * 4); 6 7//Data書き出し 8$fp = fopen("ichiran.csv","w"); 9fputs($fp, $days_line); 10for ($i = 0; $i < count($allNames_array); $i++) { 11 $line = $allNames_array[$i].",".implode($all_line_array[$i], ",")."\r\n"; 12 fputs($fp, $line); 13} 14fclose($fp);

投稿2021/02/25 21:57

FromMZ1500

総合スコア496

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

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

sonnani1374

2021/02/26 06:18

ありがとうございます! これで試してみます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問