• ベストアンサー

CSVでアップロードしたデータのランダム表示

はじめまして。 質問させてください。 CSVでアップロードしたデータをランダムで表示させたいのですが、 私自身、PHPの知識がほとんどなく困っています。 CSVで15件程の商品データをアップロードし、その中から5件をhtml上に ランダムに表示したいと考えています。 #CSV hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー (15件ほど) #PHP <?php $fp = fopen("hoge.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count == 6) break; print <<<EOD <div class="hoge"> <p class="hogehoge"><img src="hoge/$data[0]" /></p> <dl> <dt><a href="hoge.html">商品名:$data[1]</a></dt> <dd>価格:$data[2]</dd> <dd>評価: $data[3]</dd> <dd>レビュー:$data[4]</dd> </dl> </div> EOD; $count++ ; } fclose($fp) ?> と自分なりに試してみたのですが… 15件のうち5件だけを表示することはできたのですが、 それをランダムに表示するにはどこをどうしたらいいのやら… といった状況です。 どうか、お力をお貸しください。

  • PHP
  • 回答数5
  • ありがとう数6

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

  • ベストアンサー
回答No.3

shuffleが使えます。 http://www.phppro.jp/phpmanual/php/function.shuffle.html あとは順番に5個取り出すだけです。

sabeck
質問者

お礼

shuffleをどう組み込めばよいのかがいまいちわからず、現在調べているところです。ありがとうございました。

その他の回答 (4)

回答No.5

回答No.3の方の shuffle を使えば簡単ですね。 shuffleは次のように使えばいいと思います。 $temp[0] = 一行目の内容 $temp[1] = 二行目の内容 ・・・ となっていて $shuffle($temp) を実行すれば $temp[0] = 五行目の内容 $temp[1] = 七行目の内容 ・・・ のようにランダムになるので forやwhileで $temp[0]~$temp[4](5件の場合)を表示させるようにすればいいと思います。

sabeck
質問者

お礼

ご教授ありがとうございます。 無事解決しましたのでご報告です。 shuffle()を使った様々な方法を試し、 このようなコードで落ち着きました。 $Data=file('hoge.csv'); shuffle ($Data); for ( $i=1; $i<=3; $i++ ){ $line=explode(",",$Data[$i]); あとは$line[0] $line[1] $line[3]... のように割り当てました。 本当にありがとうございました。

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.4

ANo.1です。 rand()を使うより、No.3の方の挙げたshuffle()を使う方が楽に実現できますね。 ですのでrand()を使うことは考えなくてよいかと思います。 本件が解決して尚興味があれば試してみてください。

sabeck
質問者

お礼

わざわざありがとうございます。 shuffle()を使うことにより解決いたしましたが、rand()も覚えておかなくてはと思っています。 私自身まだまだ未熟ですのでもっともっと勉強していこうと思います。

回答No.2

自分もphpを始めて間もないで、もっといい方法があるかもしれません。 その点に関してはご了承ください。 1:CSVをfile関数で読み込む 例:$temp = file('hoge.csv'); fileで読み込めば$temp[0]に一行目、$temp[1]に二行目・・・となります。 2:rand関数で$tempの[]に入る数字をランダムに決める ランダムに0~14(15件の場合)から5つ表示するものを決めます。 3:split関数で行の内容を , で区切る $temp[0] = "あああ,AAA,111" という行なら $data = split(",",$temp[0])とすれば $data[0] = "あああ" $data[1] = "AAA"のようになります。 この3つを使えばできると思います。 詳しくは関数を検索などしてみてください。

sabeck
質問者

お礼

ご教授頂いた事を参考に色々試してみたのですが、 同じ商品が5つ並んでしまいます。 ソースは以下の通りです。 <?php $n = 5; $file = @file("hoge.csv"); $i = rand(0, 14); $data = split(",",$file[$i]); $i = 0; while ($i <= 4){ print <<<EOD <div class="hogehoge"> <p class="hoge"><img src="hoge/$data[0]" /></p> <dl> <dt><a href="hoge.html">商品名:$data[1]</a></dt> <dd>価格:$data[2]</dd> <dd>評価: $data[3]</dd> <dd>レビュー:$data[4]</dd> </dl> </div> EOD; $i++; } ?>

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

rand関数を使って対応できるでしょう。 http://www.php.net/manual/ja/function.rand.php fgetcsv()でcsvのデータを配列に格納した後、0から(配列の要素数-1)までの乱数を5個、重複しないように生成するといった感じになるでしょうか。

sabeck
質問者

お礼

rand関数を使ってみましたが、同じ商品が5つ並んでしまいます。 使い方が間違っているとは思うのですが…

関連するQ&A

  • PHPでCSVファイルの特定行のみ表示

    PHPでCSVファイルを読み込ませるにあたり、「クエリで指定した特定の1行だけ」を取りだしたいと考えています。 下記だと、1行目からクエリで指定した特定行までの抽出が可能です。 hoge.php?repert=5  → 1から5行目までが表示される。 従い、下記から特定行より上の行を削除すれば、当方が考えている「クエリで指定した特定の1行だけ」を取りだすことになりますが、その方法がわかりません。 ご教示いただきたくお願いいたします。 <?php $repeat = $_GET['repert']; $fp = fopen("file2.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; $count++; } fclose ($fp) ?>

    • ベストアンサー
    • PHP
  • 外部のCSVファイルをPHPで読み込み、出力させたい

    下記の質問を参考に外部のCSVファイルをPHPで読み込み、出力させるphpを書きました。 http://oshiete1.goo.ne.jp/qa1615206.html data.csvは "データ01" "データ02" "データ03" ・・・ といったように100行書いてあります。 <1ページ目に記述したphp> <?php $fp = fopen("data.csv", "r"); $repeat = 10; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0] EOD; $count++ ; } fclose ($fp) ?> 2ページ目には11行目からのデータを出力したいと思い、 $data[0]の部分を$data[11]に変えたり、 $repeat = 20; $count = 11;にしたりしたのですが、 両方ともうまくいきませんでした。 2ページ目にcsvの11行目からのデータを出力するにはどうすればいいのでしょうか? 私がしたいことは、1ページ目にcsvの1~10行目を、2ページ目にcsvの11~20行目を出力したいとおもっております。 上記のphp以外の記述でも構いませんので、どなたかお分かりになる方がいらっしゃいましたら是非教えて下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpでcsvデータをランダム表示について

    下記はcsvデータをランダムに1つだけ抽出するphpのプログラムですが、1度表示したデータに色をつけるとか、表示させない方法はありますか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> </head> <body> <?php // 抽出数 $count = 1; $list = array(); // 読み込みCSVファイル $lines = file('test.csv'); shuffle($lines); foreach ($lines as $line) { if ( ! in_array($line, $list)) { array_push($list, $line); 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); ?> </body> </html>

    • ベストアンサー
    • PHP
  • CSVの読み込みと表示

    http://cartown.jp/ のような?carid=hogeでCSVのデータを読込み表示させたいと思っております。 方法はhttp://blog.loaferz.com/?eid=255653のサイトを参考にしてみたのですが なぜかCSVのデータが表示されません。 phpは始めたばかりで自信がないのですがdata.csvの内容は 以下のようになっております。    A   B     C     D     E    F --------------------------------------------------------------- 1 |  1  車種名1  価格1  走行距離1  年式1  車検1   2 |  2  車種名2  価格2  走行距離2  年式2  車検2 ・・・以下同様 サイトの説明を見ると >商品1のリンクをクリックしたときは、商品1のデータがテンプレートに渡され、上の場合だと$data[1]の商品名がprintされます。 とあるのですがお恥ずかしながらどこがおかしいのかが全くわからずです。 是非アドバイスなどお願い致します。

    • ベストアンサー
    • PHP
  • PHPで、CSVファイルを、指定した行数だけ出力するには?

    同じようなトピックは、いくつかありましたが、あと一歩、わからないので質問させてください。 CSVファイルをPHPを使って読み込み、出力させる場合で、 CSVファイル data.csv --------------------------- データ1,説明,詳細 データ2,説明,詳細 データ3,説明,詳細 データ4,説明,詳細 データ5,説明,詳細   … データ100,説明,詳細 --------------------------- 上記のように100行あったとします。 この時、 PHPファイルを、 --------------------------- <?php $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { $num = count ($data); print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; } fclose ($fp) ?> --------------------------- と書くと、100行目まで普通に出力してしまいます。 もし、10行目までを出したい場合は、どう記述すればよいのでしょうか? 上記のPHPソースに少し書き加える形で解決できればと思うのですが・・・ 色々試しましたが、私の力だけでは無理でした。

    • ベストアンサー
    • PHP
  • CSVで指定した行から出力をする方法

    CSVから、30件データを取得するために最下部のようなコードを書きました。 しかし、「次のページ」等でもう30件(つまり31行目から)データを出力させたい場合は、どこをどのように修正すればいいのでしょうか。 $fp = fopen("exmple.csv", "r"); $repeat = 30; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print($data[0]. $data[1]. $data[2]); $count++; } ご回答お願いします。

    • ベストアンサー
    • PHP
  • CSVデータ

    CSVデータにも、「商品名」とか「紹介文」「商品ID」「カテゴリ」「メーカー名」等、CSVデータを提供している会社や商品によって項目名が色々ありますが、CSVデータを読み込めるソフト等を使用する時に、単純にそのまま読みこめば反映されるのでしょうか? それとも、CSVデータ側か、読み込む側をソフトの仕様に合わせて項目等を編集する必要があるのでしょうか? 編集の必要があるとしたらどこをどう編集するのでしょうか? 教えて頂けますよう御願いします。

  • csv形式のデータの読み込み

    csv.txt(unicode形式で保存し、ffftpでバイナリ転送モードでアップロード) =================================================================== J-0001,亜,1 J-0002,哀,2 J-0003,愛,3 J-0004,悪,4 =================================================================== のデータを、phpで読み込み、ブラウザに表示できません。 以下がソースです。いろいろ検索したり調べたりみたのですが、 だめでした。phpのヘッダーは「charset=utf-8」です。 ファイルを開いたときなのかわからないのですが、 文字化け?が起きているように思えます。 文字コードがおそらく原因だと思うんですが、行き詰まりました。 phpソース =================================================================== $data_txt = "csv.txt"; $fp = fopen($data_txt, "r"); if ($fp == false) { printf("data.txtを開けませんでした。"); return; } $count = 0; while (!feof($fp)) { $strs[$count] = fgets($fp); $strs[$count] = split(",", $strs[$count]); $count++; } printf($strs[0][1]); printf($strs[1][1]); printf($strs[2][1]); printf($strs[3][1]); =================================================================== 表示させたい実行結果 ===================== 亜哀愛悪 =====================

    • ベストアンサー
    • PHP
  • PHP、CSVファイルの日本語データが表示されない

    どうもこんにちわ。PHP初心者です。 どうか助けてください! CSVファイルを読み込んで表示させるプログラムなんですが、 サーバーが変わったら、日本語のデータのみ表示されなくなりました。 以前質問があった下記件と同じ事象で、 参考に色々試してみましたが上手くいきません。 http://oshiete1.watch.impress.co.jp/qa5972094.html ソースは下記です。 どうか、どこをどういじれば良いか、どなたか教えて頂けないでしょうか? 何卒よろしくお願いします。 ------------------ <?php //今日の日付を取得 $today = date("Ymd"); //表示数の設定。 $disp_num = 1; //CSV格納先 $fp = fopen("data/today_word.csv", "r"); while ($data = fgetcsv($fp, 10000)) { for($n = 0; $n < count($data); $n++){ $data[$n] = mb_convert_kana($data[$n], "ak", "SJIS"); } if ((ereg($today,$data[0]))) { $result[] = "<a href='$data[2]'>$data[1]</a><br />"; } } fclose ($fp); ?> -----------------------------

    • ベストアンサー
    • PHP
  • ランダムで商品を1つだけ表示させたい?

    PHPを使ってランダムに商品を1つだけ表示させたいと思います。 データはエクセルで作ってあり中身は 商品名 , 画像URL , URL , 商品説明 , 価格 , , こんな感じのデータとなっています。 最終的にはアイフレームで表示させようと考えています。 そこで、質問ですが、PHPはどのように書けばいいのでしょうか? PHPが分からない為、いろいろと調べたのですが、自分の力ではよくわかりません。 すいませんが、どなたか教えていただけないでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう