検索
ホームページバックエンド開発PHPチュートリアルPHP が複数の非反復乱数を生成するサンプル プログラム_PHP チュートリアル

PHP が複数の非反復乱数を生成するサンプル プログラム_PHP チュートリアル

Jul 13, 2016 am 10:43 AM
phprandいいえ使用存在する複数データ生成するプログラム繰り返すランダム乱数

PHP でのランダム データの生成は、mt_rand を使用して直接実現できます。非繰り返しの乱数を生成したい場合は、unique_rand 関数を使用します。一般的に使用される方法をまとめます。

コードは次のとおりです:

コードは次のとおりです コードをコピー

//範囲は 1 から 100 を配列にリストすることです
$numbers = 範囲 (1,100)
; //シャッフルすると配列の順序が崩れます
シャッフル ($numbers)
//array_slice は配列の特定のセグメントを取得します
$no=6; $result = array_slice($numbers,0,$no); for ($i=0;$i echo $result[$i]."
"; }
print_r($result); ?>


//範囲は 1 から 42 を配列にリストすることです
$numbers = 範囲 (1,42)

//シャッフルすると配列の順序が崩れます

シャッフル ($numbers)
//array_slice は配列の特定のセグメントを取得します
$result = array_slice($numbers,0,3); print_r($result);




方法 2

コードは次のとおりです

コードをコピー srand ((float)microtime()*1000000); シャッフル ($numbers) while (list (, $number) = each ($numbers)) {
$numbers = 範囲 (1,20)
エコー "$number "; }

?>




方法 3

PHP を使用して 1 ~ 20 の間で 5 つの一意の値をランダムに生成する方法

コードは次のとおりです

コードをコピー

shuffle($rand_array);//既製の配列のランダム配置関数を呼び出します return array_slice($rand_array,0,$limit);//最初の $limit 部分をインターセプトします }コードをコピー
関数 NoRand($begin=0,$end=20,$limit=5){ $rand_array=範囲($begin,$end)
print_r(NoRand()); ?>





シャッフルしない場合


コードは次のとおりです

$tmp=配列(); while(count($tmp) $tmp[]=mt_rand(1,20); $tmp=array_unique($tmp); }
印刷結合(',',$tmp); ?>

上記はすべて机上の話であり、実際の要件は次のとおりです

投票対象作品は25作品あります。1回の投票で16作品を選択する必要があります。プログラマーが以前にミスを犯し、200 人のユーザーによって生成された投票シーケンスが空でした。では、このギャップをどのように埋めるのでしょうか?

もちろん、上司に状況を報告してください。しかし、ここで議論しているのは、1 ~ 25 の非繰り返しの乱数を 16 個生成して埋める必要があるテクノロジーです。具体的に機能をどう設計するか?乱数を配列に格納し、配列内の重複する値を削除して、一定数の非反復乱数を生成します

コードは次のとおりです コードをコピー

/*
* array unique_rand( int $min, int $max, int $num )
* 一定数の非反復乱数を生成します
* $min と $max: 乱数の範囲を指定します
* $num: 生成数量を指定します
*/
関数 unique_rand($min, $max, $num) {
$count = 0;
$return = array();
while ($count $return[] = mt_rand($min, $max);
$return = array_flip(array_flip($return));
$count = count($return);
}
シャッフル($return);
$return;
を返します }

$arr = unique_rand(1, 25, 16);
並べ替え($arr);

$結果 = '';
for($i=0; $i {
$result .= $arr[$i].',';
}
$result = substr($result, 0, -1);
エコー $result;
?>

プログラムは次のように実行されます:

1 2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24

いくつかの追加メモ:

•mt_rand()関数は乱数を生成するために使用されます。この関数は、rand() よりも平均して 4 倍の速度で乱数を生成します。
•配列から重複する値を削除する場合は、array_flip()を使って配列のキーと値を2回交換する「フリップ方式」を使用します。このアプローチは、array_unique() を使用するよりもはるかに高速です。

•配列を返す前に、 shuffle() を使用して新しいキー名を配列に割り当て、キー名が 0 から n までの連続した番号であることを確認します。この手順を実行しないと、重複した値を削除するときにキー名が不連続になり、トラバーサルに問題が発生する可能性があります。


別の例を見てみましょう

36 文字の 0 ~ z のいずれかを生成します。 getOptions() メソッドを呼び出すたびに文字が生成され、array[0] = 0、array[1] = 1、…、array[35] = z のように格納されます。

コードは次のとおりです コードをコピー

配列 (
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 6
[7] => 7
[8] => 8
[9] =>9
[10] =>
[11] => b
[12] => c
[13] => d
[14] => [15] => ふ
[16] => [17] =>
[18] => [19] => j
[20] => k
[21] => [22] =>
[23] => [24] => [25] =>
[26] =>
[27] => [28] => [29] => [30] =>あなた
[31] => v
[32] =>w
[33] => ×
[34] => はい
[35] =>z
)



次に、インデックスとして 0 ~ 35 の数値をランダムに生成します。これは、実際には、変数 $result の最初の文字として上記の配列から数値をランダムに選択することになります。このランダムなインデックスには配列内の最後の値が割り当てられ、次のラウンドのランダム選択には参加しません。

コードは次のとおりです コードをコピー

// 0123456789abcdefghijklmnopqrstuvwxyzで文字を生成します
関数 getOptions()
{
$options = array();
$result = array();
for($i=48; $i {
array_push($options,chr($i)); }
for($i=65; $i {
$j = 32;
$small = $i + $j;
array_push($options,chr($small));
}
$options を返す;
}
/*
$e = getOptions();
for($j=0; $j {
エコー $e[$j];
}
*/
$len = 10;
// 配列インデックスをランダムに生成して乱数を実現します
for($j=0; $j {
$result = "";
$options = getOptions();
$lastIndex = 35;
while (strlen($result) {
// インデックスとして 0 ~ 35 からランダムに 1 つを選択します
$index = rand(0,$lastIndex);
//変数$chr
に乱数を代入する $chr = $options[$index];
// $result の一部としての乱数
$result .= $chr;
$lastIndex = $lastIndex-1;
//最後のインデックスは次のランダムな抽選に参加しません
$options[$index] = $options[$lastIndex];
}
echo $result."n";
}
?>

http://www.bkjia.com/PHPjc/633165.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633165.html技術記事 php でランダム データを生成するには、mt_rand を使用します。非繰り返しの乱数を生成したい場合は、unique_rand 関数を使用します。一般的に使用される方法をまとめます。 ...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

コンテンツセキュリティポリシー(CSP)ヘッダーとは何ですか?なぜ重要なのですか?コンテンツセキュリティポリシー(CSP)ヘッダーとは何ですか?なぜ重要なのですか?Apr 09, 2025 am 12:10 AM

XSS攻撃を防ぎ、リソースのロードを制限し、ウェブサイトのセキュリティを改善できるため、CSPは重要です。 1.CSPはHTTP応答ヘッダーの一部であり、厳格なポリシーを通じて悪意のある行動を制限します。 2。基本的な使用法は、同じ起源からのロードリソースのみを許可することです。 3.高度な使用法は、特定のドメイン名がスクリプトやスタイルをロードできるようにするなど、より微調整された戦略を設定できます。 4。CSPポリシーをデバッグおよび最適化するには、コンテンツセキュリティポリシーレポートのみのヘッダーを使用します。

HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか?HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか?Apr 09, 2025 am 12:09 AM

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

HTTPSとは何ですか、なぜWebアプリケーションにとって重要なのですか?HTTPSとは何ですか、なぜWebアプリケーションにとって重要なのですか?Apr 09, 2025 am 12:08 AM

HTTPSは、HTTPに基づいてセキュリティレイヤーを追加するプロトコルであり、主に暗号化されたデータを介してユーザーのプライバシーとデータセキュリティを保護します。その作業原則には、TLSの握手、証明書の確認、暗号化された通信が含まれます。 HTTPSを実装する場合、証明書管理、パフォーマンスへの影響、および混合コンテンツの問題に注意を払う必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター