ホームページ  >  記事  >  バックエンド開発  >  PHP 配列がシャッフルされた後、確率によって要素の出現順序を制御するにはどうすればよいですか?

PHP 配列がシャッフルされた後、確率によって要素の出現順序を制御するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-05-02 18:51:02975ブラウズ

確率に基づいて配列要素の出現順序を制御する PHP のメソッド: 配列の順序を乱すには: shuffle() 関数を使用します。確率の割り当て: array_map() を使用して、各要素に確率 (0 ~ 1) を割り当てます。重み付き配列のソート: 配列を確率の降順にソートします (確率が高い要素が最初)。要素の抽出: 並べ替えられた配列から要素を順番に抽出します。つまり、確率制御された順序で配列をスクランブルします。

PHP 配列がシャッフルされた後、確率によって要素の出現順序を制御するにはどうすればよいですか?

PHP で確率制御を使用して配列要素の出現順序を混乱させる

配列内の要素の順序を乱すことは、多くの開発シナリオに共通する問題 ランダムな抽選、ゲームメカニズムなどの一般的な要件。配列をシャッフルした後、確率に従って要素の出現順序を制御する必要がある場合、PHP には適切な関数とメソッドが用意されています。

準備

まず、スクランブルする要素を含む配列を準備します。例:

$array = [1, 2, 3, 4, 5];

shuffle() 関数を使用して配列をシャッフルします

shuffle() この関数は次のことができます。配列の要素の順序をシャッフルします。

shuffle($array);

確率を使用して要素が表示される順序を制御します

array_map() メソッドを使用して配列要素を走査し、確率を割り当てますそれぞれの要素に。確率値の範囲は 0 ~ 1 です。0 は要素が決して出現しないことを意味し、1 は要素が常に出現することを意味します。

$probabilities = [0.2, 0.3, 0.4, 0.5, 0.6];
$weightedArray = array_map(function ($element, $probability) {
    return [$element, $probability];
}, $array, $probabilities);

重み付き配列のソート

重み付き配列をソートすると、確率の高い要素が配列の先頭になります。

usort($weightedArray, function ($a, $b) {
    return $b[1] <=> $a[1];
});

要素の抽出

次に、ソートされた重み付き配列から要素を順番に抽出し、確率制御された順序でスクランブル配列を取得します。

$reorderedArray = [];
foreach ($weightedArray as $element) {
    $reorderedArray[] = $element[0];
}

実際的なケース

5 つの項目を含む配列から 3 つの項目をランダムに選択する必要があるゲームがあるとします。各アイテムの出現確率は次のとおりです:

  • アイテム 1: 20%
  • アイテム 2: 30%
  • アイテム 3: 40%
  • 項目 4: 50%
  • 項目 5: 60%

上記の手順に従って、次のコードを実装できます:

$items = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'];
$probabilities = [0.2, 0.3, 0.4, 0.5, 0.6];

shuffle($items);
$weightedItems = array_map(function ($item, $probability) {
    return [$item, $probability];
}, $items, $probabilities);

usort($weightedItems, function ($a, $b) {
    return $b[1] <=> $a[1];
});

$drawnItems = [];
for ($i = 0; $i < 3; $i++) {
    $drawnItems[] = $weightedItems[$i][0];
}

print_r($drawnItems);

上記のコードとコントロールを実行します。確率に応じた出力 3 つのアイテムが順番に描画されます。

以上がPHP 配列がシャッフルされた後、確率によって要素の出現順序を制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。