2

特定の配列項目を一定の割合で選択する方法を見つけようとしています。だから言ってみましょう:

$testArray = array('item1', 'item2', 'item3', 'item4', 'item5');

では、item1 を選択するにはどうすればよいでしょうか。40% の確率であるとしましょう。これはおそらく本当に簡単なことだと思いますが、今日は頭を包み込むことができないようです.

4

1 に答える 1

3

これらのパーセンテージで:

$chances = array(40,15,15,15,15);

1 から 100 までの乱数を選択します。

$rand = rand(1,100);

対応する配列項目を選択します。

| item1              | item2  | item3  | item4  | item5  |
0                   40       55       70       85       100
$ref = 0;
foreach ($chances as $key => $chance) {
    $ref += $chance;
    if ($rand <= $ref) {
        return $testArray[$key];
    }
}

より一般的な解決策の可能な改善:

  • array_sum()代わりに使用100
  • $chancesが入力配列と同じキーを持っていることを保証します (つまり、 array_keysand を使用array_combine)
于 2013-03-12T06:27:25.487 に答える