• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpでcsvデータをランダム表示について)

phpでランダムにcsvデータを表示する方法

このQ&Aのポイント
  • phpを使用して、csvデータをランダムに表示する方法について質問があります。
  • 質問者が提示したphpプログラムでは、csvデータをランダムに抽出し、1つだけ表示しています。
  • 質問者は、表示したデータに色をつけたり、表示させない方法があるかどうか知りたいとしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Proof4
  • ベストアンサー率78% (151/192)
回答No.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;  } の部分を工夫することで実現できるでしょう。

noname#240930
質問者

お礼

ありがとうございます!勉強になります!

関連するQ&A