私は、各行に文のリストを含むテキストファイルを持っています。現在、私は線をランダム化していますが、多くの重複が表示されています。どのようにしてこれらの行を配列にしてそれらをすべてランダムに表示することができますが、すべての文章が表示されるまで文章を表示しません。基本的には、引用符をもう一度表示する前に、配列全体をループする必要があります。ファイルの内容を配列に入れてシャッフルします。複数回出力しないでください。
1
A
答えて
0
これを行う簡単な方法は、毎回配列をシャッフルするのではなく、ランダムなインデックスを選択することです。次に、この索引をリストに保管します。これにより、既にこのインデックスを使用している場合は、次の関数呼び出しをチェックすることができます(ソートされたリストにそれらを格納する場合は、バイナリ検索などを使用して非常に高速にチェックできます)。インデックスの数がファイル内の行数と等しい場合は、その時点ですべてのインデックスが使用されているので、リストを破棄して新しいリストを開始することができます。
0
最初に重複する行を削除し、その結果を配列xに入れることができます。
次に、配列xから1つのランダム要素を選んで印刷し、2番目の配列(最初は空の配列)yに移動します。 配列xが空になるまで繰り返します。次に、配列yから配列xまでの要素 をすべて最初からやり直すことができます。
1
シャッフルはあなたの配列の複製を作成しないので、このコードはうまく動作します:
<?php
$list = array(1,2,3,4,5,6);
shuffle($list);
print_r($list);
?>
Array
(
[0] => 2
[1] => 3
[2] => 6
[3] => 4
[4] => 1
[5] => 5
)
あなたは、ファイル内の重複行を持っていることを意味します。一意の値を持つ配列を取得する場合は、次のようにします。$unique = array_unique($list);
<?php
$list = array(1,1,2,2,3,3);
$unique = array_unique($list);
shuffle($unique);
print_r($unique);
?>
Array
(
[0] => 3
[1] => 2
[2] => 1
)
関連する問題
- 1. 各イテレータが内容配列の値を出力しない
- 2. 文字配列が正しく入力されていない
- 3. プロパティの内容が複数回設定されています
- 4. Outlookの配布リストにドロップダウンを入力してください
- 5. 入力ファイルの内容を確認しています
- 6. 配列がすべての回答を正しく出力しない
- 7. PHPで配列をシャッフルすると配列がシャッフルされない
- 8. 内容に基づいて複数の出力に分割入力しますか?
- 9. gdbを使用して配列の内容をファイルに出力する
- 10. jQueryの入力をURLで入力してください。
- 11. PHPの配列が正しく出力されない
- 12. スペースで文字列を入力してください
- 13. 配列でアクションシートを記入してください
- 14. セル配列に数値文字列をすぐに入力してください
- 15. 配列に追加の行を挿入してデータベースに入力してください
- 16. SQLテーブルの全列を入力してください
- 17. 出力ファイルにプログラムが正しく出力されていない
- 18. 連想配列のキーの複数の値と等しくない部分を選択してください
- 19. txtファイルを開いてobjective-cで内容を出力する(ただし、OSXやiOSではない)
- 20. .cssファイルの出力ディレクトリを変更してください
- 21. 配列のシャッフルが機能しない
- 22. ループの内容を1ループで2回出力しますか?
- 23. ログを選択して別のファイルにイベントを入力してください
- 24. php - simpleXML同じノードを配列に入れてください
- 25. 出力ストリームで作成されたバイナリ出力ファイルの内容
- 26. 無効なasp.net URLを入力しないでください
- 27. Android:文字列を入力してください
- 28. APIレスポンスに基づいてGridViewの列データを入力してください
- 29. iPhoneで入力するすべてのタイプを入力してください
- 30. Kerningの文字を入力しないでください
表示先は誰ですか?どんな状況で? 1人のユーザー、またはすべてのユーザーのループスルー? – Problematic
これは、各行に1つの文を含む単なるテキストファイルです。その文をエコーする必要があります。 –
そして、すべての文章が表示されるまで要求ごとに1行を表示したい場合は、リストをランダム化して再開しますか?私はまだあなたが探しているものを正確に理解するために少し苦労しています。 – Problematic