コンピューター ウィンドウズ インターネット

PHPランダム関数を使用します。 phpphpランダム整数の配列からのランダム選択

PHPのrand()またはmt_rand()関数を使用して、乱数を生成できます。 乱数を使用する必要性は、変数、ファイルの命名、重要な情報の作成、およびセキュリティの確保のために実際に発生することがよくあります。

ランダム性と独自性

PHPのランダム関数には、rand()とmt_rand()の2つの種類があります。 最初のケースのアルゴリズムはより単純で、疑似乱数を生成すると考えられています。 2番目のオプションは、より高速なアルゴリズムとよく知られた数学的特性を備えています。 ほとんどの場合、乱数を取得する必要がある場合は、一連のPHPランダム呼び出しを使用して、一意の番号の組み合わせを取得できます。

1から26または1から32の数字を基準として、それらをランダムに取得すると、ラテン文字またはキリル文字のシーケンスとして重要な情報を形成できます。 この場合、PHPランダムは、たとえば通信チャネルやアルゴリズムをテストするために、アルファベット順の情報のシーケンスを生成する方法です。

乱数は、確率変数の分布則に従って複数回出現する可能性があるため、一意になることはめったにありません。 しかし、特にJavaScript言語の静的変数PHPとMath.randomを組み合わせると、時間の経過とともに繰り返されない実際の一意の乱数を取得できます。

時間関数の使用

PHPとJavaScriptの両方の時間関数を使用すると、ある時点で十分な数のイベントが発生し、確率変数が繰り返されることはめったにありませんが、数値の一意の組み合わせを形成できます。

可能な値の広い範囲で秒またはミリ秒の範囲でPHPランダムを使用することにより、数字または文字の一意のランダムな組み合わせを取得できます。 ほかに何か?

時間関数の値、順次増加する数値、およびPHPランダムを組み合わせたり、クライアントとサーバーの通信チャネルの信頼性の高いセキュリティを確保したり、変数に一意のコードを作成したり、アルゴリズムで予測できないイベントを生成したりできます。

PHP乱数ジェネレーターは、ほとんどのタスク、特に最小限のコストで高品質の結果をすばやく取得する必要がある場合に優れたソリューションです。 関数rand()およびmt_randを連続的に増加する一連の数値または時間値と組み合わせて使用​​すると、値が繰り返され、一意である乱数を取得できます。

こんにちは、みんな! この記事では、 PHP7.1で乱数を生成するための新機能.

この更新は開発者には見えませんでしたが、プログラミング言語が改善されました PHP乱数を生成する分野で。

知られている限りでは、 PHP関数を使用できます ランド(最小、最大)乱数を生成するには:

エコーランド(7、17);

ここでページを更新すると、毎回新しい乱数が届きます。

しかし、すべてが見た目ほど単純なわけではありません。 重要なのは、乱数を生成する対象に応じて、関数が ランド()異なる世代のシステムを使用します。 それらの。 それはそれが使用されるシステムに依存します。 一部のシステムでは、それぞれ弱い生成方法を使用できます。完全に乱数を受け取るわけではありません。

V PHP 7.1この問題は修正され、機能が追加されました mt_rand():

エコーmt_rand(7、17);

この機能は、セキュリティを含め、はるかにうまく機能します。 知っておくべき重要なことは、この関数を使用する場合は ランド() v PHP 7.1、その後、自動的に上書きされます mt_rand()..。 それらの。 ランド()今はただの別名 mt_rand().

ランダムな結果を取得するための他の多くの機能が改善されました PHP 7.1..。 たとえば、配列からランダムな値を取得する方法を見てみましょう。

$ names = ["Ivan"、 "Alexander"、 "Vasiliy"];
$名をエコーし​​ます。

それらの。 このような関数は、より高品質の乱数を生成するように改善されています。 PHP 7.1..。 はい、この更新は見過ごされていましたが、どの言語で記述しても、関数内で何が起こり、どのように動作するかを理解することは非常に重要です。

タスク
数値範囲内で乱数を生成する必要があります。

解決
mt_rand()関数の目的は次のとおりです。

// $ upperと$ lowerの間の乱数(両端を含む)
$ random_number = mt_rand($ lower、$ upper);

議論
乱数の生成は、ランダムな画像を表示したり、ゲームの開始点をランダムに割り当てたり、データベースからランダムなエントリを選択したり、一意のセッションIDを生成したりする必要がある場合に役立ちます。 2点間で乱数を生成するには、mt_rand()関数に2つの引数を渡す必要があります。

$ random_number = mt_rand(1、100);

引数なしでmt_rand()を呼び出すと、ゼロからmt_getrandmax()によって返される最大乱数までの数値が返されます。 コンピュータが真に乱数を生成することは困難です。 彼は指示に従うのがはるかに上手で、自発的な行動はあまり得意ではありません。 コンピューターに乱数を生成させる必要がある場合は、繰り返し可能なコマンドの特定のセットをコンピューターに与える必要がありますが、繰り返しの事実によって、ランダム性が達成される可能性は低くなります。

PHPには、2つの異なる乱数ジェネレーターがあります。rand()と呼ばれる古典的な関数と、より高度なmt_rand()関数です。

MT(Mersenne Twister)は、素数を研究したフランスの僧侶で数学者のMarinMersenneにちなんで名付けられた疑似乱数ジェネレーターです。 このジェネレーターのアルゴリズムは、これらの素数に基づいています。 mt_rand()関数はrand()関数よりも高速で、より多くの乱数を生成するため、前者を使用することをお勧めします。

PHPのバージョンが4.2より前の場合は、mt_rand()(またはrand())関数を初めて呼び出す前に、mt_srand()(またはsrand())を呼び出してジェネレーターを初期値で初期化する必要があります。関数。 シードは、ランダム関数が返す乱数を生成するための基礎として使用する数値です。 これは、上記のジレンマを解決する方法、つまり繰り返しとランダム性を指します。

非常に速く変化し、再現性の可能性が低い初期値として(これらは、適切な初期値が特徴づける必要のあるプロパティです)、非常に正確な時間関数microtime()によって返される値を取得できます。 ジェネレータを一度初期化するだけで十分です。 PHP 4.2以降は自動的に初期化を処理しますが、mt_rand()を最初に呼び出す前に初期値を手動で設定した場合、PHPはそれを独自の初期値に置き換えません。

データベースからランダムレコードを選択する必要がある場合、最も簡単な方法は、最初にテーブル内のフィールドの総数を決定し、この範囲から乱数を選択してから、データベースからこの行をクエリすることです。

$ sth = $ dbh-> query( "SELECT COUNT(*)AS count FROM quotes");
if($ row = $ sth-> fetchRow())(
$カウント= $行;
) そうしないと (
死ぬ($行-> getMessage());
}
$ランダム= mt_rand(0、$ count-1);
$ sth = $ dbh-> query( "SELECT quote FROM quotes LIMIT $ random、1");
while($ row = $ sth-> fetchRow())(
$行を出力します。

"\ NS";
}

このコードスニペットは、テーブル内の行の総数を決定し、その範囲から乱数を生成してから、LIMIT $ random、1を使用して、$ randomから開始してテーブルから1行を選択します。 MySQLバージョン3.23以降では、別の方法が可能です。

$ sth = $ dbh-> query( "SELECT quote FROM quotes ORDER BY RAND()LIMIT 1");
while($ row = $ sth-> fetchRow())(
$行を出力します。 "\ NS";
}

この場合、MySQLは最初に行をランダム化し、次に最初の行を返します。

私はすでに数回私がどのように行うか尋ねられました 引用符のランダム出力ブロック内の私のウェブサイトで " スマートクォート「さらに、ここでの問題は人々の理解の欠如であることがわかりました。 PHPの配列からランダムな要素を推測する方法..。 タスクは単純ですが、それでも、質問が発生するため、それらに答える必要があります。

すぐにコードをお渡しします。 引用符のセットを持つ配列があるとしましょう。 そして、ランダムなものを1つ選択して、次のように出力する必要があります。

$引用符=配列(); //空の配列を初期化します
$ quotes = "あなたの考えに注意してください、彼らは行動の始まりです。"; //最初の引用
$ quotes = "生き残るのは最も賢くも最強でもありませんが、最も変化しやすいです。"; // 2番目の引用
$ quotes = "人生は山です:あなたはゆっくりと上がり、速く降ります。"; // 3番目の引用
$ quotes = "人々は金持ちになりたくない、人々は他の人よりも金持ちになりたい。"; // 4番目の引用
$ number = mt_rand(0、count($ quotes)-1); // 0から(配列の長さから1を引いたもの)までの乱数を取ります
エコー$引用符[$番号]; //見積もりを表示します
?>

重要なのは 乱数を取得する..。 あなたがしなければならないのは正しい境界を設定することです。 配列の全長に沿ってランダムな要素を選択する必要がある場合、これは 0 前 ( 配列の長さから1を引いたもの)。 そしてただ 結果のランダムインデックスを使用して、要素を配列から引き出します.

引用符付きのタスクについては、データベースに保存することをお勧めします。 原則として、サイトが非常に単純な場合は、テキストファイルで実行できます。 ただし、データベース内の場合は、を使用することをお勧めします ランド()制限 v SQLクエリこれにより、データベースから単一のランダムな見積もりをすぐに取得できます。