Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menjana Nombor Rawak Berwajaran dalam PHP?

Bagaimana untuk Menjana Nombor Rawak Berwajaran dalam PHP?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-03 08:40:08238semak imbas

How to Generate Weighted Random Numbers in PHP?

Penjanaan Nombor Rawak Berwajaran dalam PHP

Soalan:

Bagaimana anda boleh menjana nombor rawak antara 1 dan 10, tetapi dengan kebarangkalian yang lebih tinggi untuk memilih nombor 3, 4, dan 5 berbanding 8, 9, dan 10 dalam PHP?

Jawapan:

Untuk mencapai rawak wajaran ini, anda boleh menggunakan tatasusunan bersekutu yang memetakan setiap hasil yang diingini kepada beratnya. Dalam kes ini, anda boleh membuat tatasusunan dengan 3, 4 dan 5 mempunyai pemberat yang lebih tinggi (mis., 3 - 50%, 4 - 30%, 5 - 20%) daripada 8, 9 dan 10 (mis., 8 - 10 %, 9 - 5%, 10 - 5%).

Berdasarkan pemberat yang diberikan, anda boleh menjana nombor rawak menggunakan mt_rand dalam julat jumlah pemberat. Kemudian, gelung melalui tatasusunan dan tolak setiap nilai berat daripada nombor rawak sehingga ia menjadi negatif. Kunci tatasusunan sepadan dengan berat yang menjadikan nombor rawak negatif ialah hasil yang diingini.

Berikut ialah fungsi PHP yang melaksanakan rawak wajaran ini:

/**
 * getRandomWeightedElement()
 * Utility function for getting random values with weighting.
 * Pass in an associative array, such as array('A'=>5, 'B'=>45, 'C'=>50)
 * An array like this means that "A" has a 5% chance of being selected, "B" 45%, and "C" 50%.
 * The return value is the array key, A, B, or C in this case.  Note that the values assigned
 * do not have to be percentages.  The values are simply relative to each other.  If one value
 * weight was 2, and the other weight of 1, the value with the weight of 2 has about a 66%
 * chance of being selected.  Also note that weights should be integers.
 *
 * @param array $weightedValues
 */
function getRandomWeightedElement(array $weightedValues) {
    $rand = mt_rand(1, (int) array_sum($weightedValues));

    foreach ($weightedValues as $key => $value) {
        $rand -= $value;
        if ($rand <= 0) {
            return $key;
        }
    }
}

Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Rawak Berwajaran dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn