
はじめまして。
質問させてください。
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件だけを表示することはできたのですが、
それをランダムに表示するにはどこをどうしたらいいのやら…
といった状況です。
どうか、お力をお貸しください。
No.3ベストアンサー
- 回答日時:

No.5
- 回答日時:
回答No.3の方の shuffle を使えば簡単ですね。
shuffleは次のように使えばいいと思います。
$temp[0] = 一行目の内容
$temp[1] = 二行目の内容
・・・
となっていて
$shuffle($temp) を実行すれば
$temp[0] = 五行目の内容
$temp[1] = 七行目の内容
・・・
のようにランダムになるので
forやwhileで $temp[0]~$temp[4](5件の場合)を表示させるようにすればいいと思います。
ご教授ありがとうございます。
無事解決しましたのでご報告です。
shuffle()を使った様々な方法を試し、
このようなコードで落ち着きました。
$Data=file('hoge.csv');
shuffle ($Data);
for ( $i=1; $i<=3; $i++ ){
$line=explode(",",$Data[$i]);
あとは$line[0] $line[1] $line[3]...
のように割り当てました。
本当にありがとうございました。
No.4
- 回答日時:
ANo.1です。
rand()を使うより、No.3の方の挙げたshuffle()を使う方が楽に実現できますね。
ですのでrand()を使うことは考えなくてよいかと思います。
本件が解決して尚興味があれば試してみてください。
わざわざありがとうございます。
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つを使えばできると思います。
詳しくは関数を検索などしてみてください。
ご教授頂いた事を参考に色々試してみたのですが、
同じ商品が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++;
}
?>
No.1
- 回答日時:
rand関数を使って対応できるでしょう。
http://www.php.net/manual/ja/function.rand.php
fgetcsv()でcsvのデータを配列に格納した後、0から(配列の要素数-1)までの乱数を5個、重複しないように生成するといった感じになるでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
アンドロイドスマホでのphp ech...
-
Postgresの特定のカラムからス...
-
ここで言う空文字の意味とは?
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP 別ドメインへのファイル保存法
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
C言語でCSVファイルの行数を読...
-
自動で番号を振りたい
-
ヒアドキュメントの中のfor文
-
csvの内容を行単位で削除したい
-
ログファイルが一定行数を超え...
-
【PHP】csvファイルへの書き出...
-
配列同士の足し算のループ処理
-
掲示板のコメント削除
-
バイナリファイルの内容を、そ...
-
FortranのOPEN文
-
pythonのファイルの並びでの読...
-
配列をファイルに書き込む方法
-
文字列(丸数字)の文字化けに...
-
CSVファイルの最終行のデー...
-
複数行のデータのPOST処理に関して
-
doxygenを使用する環境について
-
PHPでCSVの一部の行を編集したい
おすすめ情報