前提・実現したいこと
現在phpで、選手データ動画CSVを作成しています。
※ブラウザ上に選手の情報を表示し、よろしければCSVで保存という形です。
実現したいことは、各選手ごとに動画IDを持っており、その動画IDは毎月バラバラに発表されるので
発表されたごとに手動で保存したいと考えております。
イメージ図
●ここで保存を押すと、CSVのこと行に動画IDが入るようにしたいです。
最初のCSVの中身は以下の通りです。
1111,山田太郎,20161218,一般,始まりの終わり,⑥
2222,田中太郎,20161220,G1,最後から三番目,⑥
※動画IDが入るところは⑥の場所になります。
★補足★
DBを使わず、CSVのみで行う予定です。
ブラウザ場の2行目(画像で言うと山田太郎さん)の動画IDに数字をいれ、保存すると、CSVの山田太郎さんの動画IDの場所に数値が入るようにしたいです。
どのような方法があるか、アドバイスの方をいただけると嬉しいです・・・。
宜しくお願い致します。
現在のコード
//★メニューバー表示★ include('index.php'); //★ファイル名定義★ $file_name = mb_convert_encoding('動画用', "sjis" , "UTF-8" ); $days = date("Ym99"); $day = substr($days,0,6); $yearmonth = $_POST["yearmonth"]; //★月別優勝レーサー一覧取得★ if($xml = @file_get_contents("データ情報URL")){ $xml = simpleXML_load_string($xml); $xml = (array)($xml->table); $xml = (array)($xml["record"]); $max = count($xml); class xml { public $toban; public $name; public $hdate; public $grade; public $rsname; function __construct($toban, $name, $hdate, $grade, $rsname) { $this->toban = $toban; $this->name = $name; $this->hdate = $hdate; $this->grade = $grade; $this->rsname = $rsname; } } //★CSVファイルへ出力★ $output = ""; $out = ""; // 結果配列 $result = array(); // 全ての要素について一つずつ取り出して実行する foreach ($xml as $x){ // キー名をセット $keyValue = $x->toban . $x->name .$x->rsname; if (!isset($result[$keyValue])) { // 同じ toban, name の要素が存在しないので新たに設定する $result[$keyValue] = array( 'toban'=>preg_replace("/( | )/", "", $x->toban) , 'name'=>preg_replace("/( | )/", "", $x->name), 'hdate'=>$x->hdate, 'grade'=>preg_replace("/( | )/", "", $x->grade), 'rsname'=>preg_replace("/( | )/", "", $x->rsname), ); } if ($x->grade == 'SG') { $result[$keyValue]['grade'] = "SG"; }elseif ($x->grade == 'GⅠ') { $result[$keyValue]['grade'] = "G1"; }elseif ($x->grade == 'GⅡ') { $result[$keyValue]['grade'] = "G2"; }elseif ($x->grade == 'GⅢ') { $result[$keyValue]['grade'] = "G3"; }elseif ($x->grade == '一般') { $result[$keyValue]['grade'] = "一般"; } if (strpos($x->rsname,'SG') !== false) { $result[$keyValue]['rsname'] = str_replace('SG', 'SG', $x->rsname); }elseif (strpos($x->rsname,'GⅠ') !== false) { $result[$keyValue]['rsname'] = str_replace('GⅠ', 'G1', $x->rsname); }elseif (strpos($x->rsname,'GⅡ') !== false) { $result[$keyValue]['rsname'] = str_replace('GⅡ', 'G2', $x->rsname); }elseif (strpos($x->rsname,'GⅢ') !== false) { $result[$keyValue]['rsname'] = str_replace('GⅢ', 'G3', $x->rsname); } } //登番ソート(昇順) foreach($result as $key => $row){ $toban[$key] = $row["toban"]; } array_multisort($toban,SORT_ASC,$result); /* $output =$yearmonth.mb_convert_encoding("動画用", "SJIS", "UTF-8"); $output .="\n"; $output .= mb_convert_encoding("登番", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("選手名", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("日付", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("グレード", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("レース名", "SJIS", "UTF-8"); $output .="," . mb_convert_encoding("動画ID", "SJIS", "UTF-8"); $output .="\n"; */ foreach(array_keys($result) as $key) { $output .= $result[$key]['toban']; $output .="," . mb_convert_encoding($result[$key]['name'], "SJIS", "UTF-8"); $output .="," . $result[$key]['hdate']; $output .="," . mb_convert_encoding($result[$key]['grade'], "SJIS", "UTF-8"); $output .="," . mb_convert_encoding($result[$key]['rsname'], "SJIS", "UTF-8"); $output .=","; //最後のカンマを削除し改行する $output .= "\n"; } //データ書き込み file_put_contents("./out/$yearmonth$file_name.csv", $output); $file = "./back/$yearmonth$file_name.csv"; if( !file_exists($file) ){ file_put_contents("./back/$yearmonth$file_name.csv", $output); } //ダウンロード echo ("<b>ダウンロードはこちら ⇒ </b>"); echo '<a href="./back/'.$yearmonth.'動画用.csv">'.$yearmonth.'動画用.csv</a><br/>'; echo "※CSVはテキストで開いてください。<br/><br/><br/>"; ?> <!-- ★データ表示★ --> <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>csvファイル</title> <style> table { border-collapse: collapse; } td { border: 1px solid #333; text-align:center; } .wd{ border: 1px solid #333; text-align:left; } </style> </head> <body> <?php echo "<b>【↓内容はこちら↓】<br><br> ~ $yearmonth 月データ ~</b><hr><br>";?> <?php $fpd = fopen("./back/$yearmonth$file_name.csv", 'r+'); print '<table border="1">'; print '<tr> '; print '<td> 登 番 </td>'; print '<td> 選手名 </td>'; print '<td> 日 付 </td>'; print '<td> グレード </td>'; print '<td class="wd"width="500px" > レース名 </td>'; print '<td> 動画ID </td>'; while (($data = fgets($fpd)) !== FALSE){ $data = explode(",", $data); mb_convert_variables('UTF-8', 'sjis-win', $data); print '</tr>'; print '<tr>'; /* 登番 */ print'<td>' . $data[0] .'</td>'; /*選手名 */ print'<td>' . $data[1] .'</td>'; /*日付 */ print'<td>' . $data[2] .'</td>'; /*グレード */ print'<td>' . $data[3] .'</td>'; /*レース名 */ print'<td class="wd">' . $data[4] .'</td>'; /*動画ID */ print'<td></td>'; $out .= mb_convert_encoding($data[0], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[1], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[2], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[3], "SJIS", "UTF-8"); $out .="," . mb_convert_encoding($data[4], "SJIS", "UTF-8"); $out .=","; $out .= "\n"; file_put_contents("./back/$yearmonth$file_name.csv", $out); } print '</tr>'; print '</table>'; fclose($fpd); ?> </body> </html> <?php }else if($yearmonth == $day){ echo "<b>今月の情報は、【最新情報作成】から作成してください。</b>"; }else{ echo "<b>日付( YYYYMM )を正しく入力してください。<br/> または選択月のレースが1レースも終わっていない場合があります。</b>"; } ?> コード