- ベストアンサー
phpでランダムにcsvデータを表示する方法
- phpを使用して、csvデータをランダムに表示する方法について質問があります。
- 質問者が提示したphpプログラムでは、csvデータをランダムに抽出し、1つだけ表示しています。
- 質問者は、表示したデータに色をつけたり、表示させない方法があるかどうか知りたいとしています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
すでに表示された行を表示しない場合の実装例を示します。 <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> </head> <body> <?php // 抽出数 $count = 1; $list = array(); // 表示されたCSVファイルの行のインデックスを格納しておくファイル $displayed_indexes_file = 'displayed.json'; // ファイルが存在すれば読み取り if(file_exists($displayed_indexes_file)){ $displayed = json_decode( file_get_contents($displayed_indexes_file) ); }else{ $displayed = []; } // 読み込みCSVファイル $lines = file('test.csv'); $random = range(0, count($lines)-1); shuffle($random); foreach ($random as $r) { // すでに表示されていたら表示しない if ( in_array($r, $displayed)) { continue; } $line = $lines[$r]; if ( ! in_array($line, $list)) { array_push($list, $line); // 表示するインデックスを追加 array_push($displayed, $r); if (count($list) >= $count) { break; } } } // CSVファイルに出力 $file = fopen('test2.csv', 'w'); foreach ($list as $l) { echo $l.'<br>'; if ($file) { fputs($file, $l); } } fclose($file); // 表示されたインデックスを保存 file_put_contents( $displayed_indexes_file, json_encode($displayed) ); ?> </body> </html> ※OKWAVEの仕様上、インデントを全角スペースで表現しています。コピペの際はご注意ください。 ポイントは$linesそのものではなく、$linesのインデックスをshuffleする点です。こうすることでCSVファイルの各行を一意に特定し、表示されたデータをファイルに保持することができます。 $displayed_indexes_fileが削除されると表示履歴はリセットされます。 すでに表示したデータに色を付けたいという場合は if ( in_array($r, $displayed)) { continue; } の部分を工夫することで実現できるでしょう。
お礼
ありがとうございます!勉強になります!