3

オブジェクトがあるとしましょう:

$person->name = array('James',
                      'Sam',
                      'Kevin',
                      'Mike');
$person->weight = array(1,
                        3,
                        1,
                        7);

上記の例でJamesは、重みは1Sam重みは3などです (インデックスの場所に基づく)。

一人の名前だけをエコーできるようにしたい。重みが高いほど、あなたの名前が選ばれる可能性が高くなります。重みが低いほど、あなたの名前が選ばれる可能性は低くなります。宝くじのようなものですが、重みがあります。これを行う方法について何か考えはありますか?

4

3 に答える 3

3

これは機能するはずです:

$weighted = array();
foreach($person->weight as $key => $value) {
    $weighted = array_merge($weighted, array_fill(0, $value, $key));
}
$index = array_rand($weighted);
echo $person->name[$index];

この答えに基づいて。

于 2012-06-01T22:32:14.170 に答える
1

新しいアレイを作成し、Samという名前をアレイに3回追加し、マイクを7回、他の名前を1回追加して、ランダムに1つ選択します。

于 2012-06-01T22:31:42.560 に答える
1

すべての重みを合計して、1 とその合計の間の乱数を生成することもできます。次に、重みの配列を反復処理して、結果が乱数以上になるまでそれらを合計し、その人物を取得できます。少し速いかもしれません。

于 2012-06-01T22:41:51.543 に答える