数千の配列をランダムに並べて表示させるプログラムを作りたいと思っています。プログラムはPHPを考えています。
例えば配列数を1000だとすると
$file_name[0] = "files0";
$file_name[1] = "files1";
$file_name[2] = "files2";
$file_name[3] = "files3";
$file_name[4] = "files4";
・・・
$file_name[999] = "files999";
だとします。この配列からランダムに重複無く表示したいと思っています。出力例として、
files3
files328
files1
files32
・・・
files473
とこんな感じです。私の考えたアルゴリズムではランダムの数字を出力し、その配列が表示されていれば再度ランダムな数字を算出、配列が表示されていなければ表示し、配列が表示されたというフラグを付けます。
しかし、この方法だと最初はスムーズに出てくるのですが、最後にはなかなか出力されないようになります。当然といえば当然ですが。
アルゴリズムだけでも、ご存知の方ご教授いただけると幸いです。
No.1ベストアンサー
- 回答日時:
1から必要なだけの数の要素を持つ配列を生成してから
シャッフルして、頭から順に出力。
shuffle
http://search.net-newbie.com/php/function.shuffl …
No.3
- 回答日時:
配列のm番目の値とn番目の値を交換する処理を作ります。
mとnにそれぞれ配列の個数を超えないランダムな数を入れて
配列のm番目の値とn番目の値を交換する処理を最低でも配列の個数の半分だけ繰り返します。
これで配列はランダムに並びかわってしかも重複はできません。
これで納得できるようでしたら#1さんのshuffle関数はやってることは同じですからこれを使った方が楽です。
No.2
- 回答日時:
在り来たりなアルゴリズムですが、カードに例えてみると簡単です。
昇順でもいいですから、n枚カードを並べます。
1~n枚目のうち、ランダムでr枚目を引きぬきますが、ここで隙間をなくしたい。でも、詰める必要はありません。空いた所に、n枚目のカードを移せばいいだけなのです。n枚目は空となり、これで1枚減ってn-1枚になりました。r枚目のカードはもうないので、重複することはありません。もう一度ランダムでr枚目なら、前のn枚目のカードだったわけです。
これを、なくなるまで繰り返せば完了です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) AndroidStudio 途中で終了する。 1 2023/04/26 11:21
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- 経営学 決算公告の見方について 1 2022/10/15 14:32
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
【Smarty】foreach関数やsectio...
-
zend_dbについて
-
漢字のソートについて
-
postgresql関数をつかったレコ...
-
Smartyのテンプレートからjavas...
-
$_POSTを一括してサニタイズし...
-
file_existsでファイル名の部分...
-
タブ区切りのデータでnullのデ...
-
phpmyadminにおける動作速度が...
-
セッション変数
-
PHP多次元配列で重複チェック
-
OCI で、SELECT結果行数を取得...
-
数千の配列をランダムに並べて表示
-
リストビュー 条件により表示
-
phpで、連想配列を普通の配列に...
-
変数の名前をループで
-
PHPの問題を解いているのですが…
-
チェックボックスが複数選択で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
$_SESSIONに二次元配列を使える...
-
file_existsでファイル名の部分...
-
配列をループでたくさん宣言し...
-
foreachのなかで次のキーを参照...
-
String だと「 ByRef引数の型が...
-
PHPのカッコ[ ]の使い方について
-
配列を回すとき、最後の要素だ...
-
配列一致(要素順番は違うが内容...
-
チェックボックス複数選択 mys...
-
漢字のソートについて
-
postgresql関数をつかったレコ...
-
ネストが深い時のforeachはどう...
-
URLのサブドメインとドメイン部...
-
OCI で、SELECT結果行数を取得...
-
【Smarty】foreach関数やsectio...
-
$_POSTを一括してサニタイズし...
-
phpで、連想配列を普通の配列に...
-
チェックボックスが複数選択で...
-
連想配列のprint_rやvar_dump出...
-
PHP 配列の添字に変数は使えない?
おすすめ情報