Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk mengawal susunan penampilan elemen melalui kebarangkalian selepas tatasusunan PHP dikocok?

Bagaimana untuk mengawal susunan penampilan elemen melalui kebarangkalian selepas tatasusunan PHP dikocok?

WBOY
Lepaskan: 2024-05-02 18:51:02
asal
1015 orang telah melayarinya

Kaedah dalam PHP untuk mengawal susunan penampilan elemen tatasusunan berdasarkan kebarangkalian: Mengganggu susunan tatasusunan: gunakan fungsi shuffle(). Tetapkan kebarangkalian: Gunakan array_map() untuk menetapkan kebarangkalian (0-1) kepada setiap elemen. Isih tatasusunan berwajaran: Isih tatasusunan dalam tertib menurun kebarangkalian (elemen dengan kebarangkalian lebih tinggi dahulu). Ekstrak elemen: Ekstrak elemen daripada tatasusunan yang diisih mengikut turutan, iaitu, berebut tatasusunan dalam susunan terkawal kebarangkalian.

Bagaimana untuk mengawal susunan penampilan elemen melalui kebarangkalian selepas tatasusunan PHP dikocok?

Menggunakan kawalan kebarangkalian dalam PHP untuk mengganggu susunan penampilan elemen tatasusunan

Mengganggu susunan elemen tatasusunan ialah keperluan biasa dalam banyak senario pembangunan, seperti cabutan rawak, mekanisme permainan, dsb. Jika anda perlu mengawal susunan penampilan elemen mengikut kebarangkalian selepas mengocok tatasusunan, PHP menyediakan fungsi dan kaedah yang sesuai.

Persediaan

Mula-mula, sediakan tatasusunan yang mengandungi elemen yang anda ingin berebut. Contohnya:

$array = [1, 2, 3, 4, 5];
Salin selepas log masuk

Gunakan fungsi shuffle() untuk mengocok tatasusunanshuffle() 函数打乱数组

shuffle() 函数可以打乱数组中元素的顺序。

shuffle($array);
Salin selepas log masuk

使用概率控制元素出现的顺序

使用 array_map()

Fungsi shuffle() boleh mengocok susunan elemen dalam tatasusunan.

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

Gunakan kebarangkalian untuk mengawal susunan elemen yang muncul

Gunakan kaedah array_map() untuk melintasi elemen tatasusunan dan tetapkan kebarangkalian kepada setiap elemen. Nilai kebarangkalian berkisar antara 0 hingga 1, di mana 0 bermakna elemen tidak akan muncul dan 1 bermakna elemen akan sentiasa muncul.

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

Isih tatasusunan berwajaran

Isih tatasusunan berwajaran, elemen dengan kebarangkalian yang lebih tinggi akan berada pada permulaan tatasusunan.

$reorderedArray = [];
foreach ($weightedArray as $element) {
    $reorderedArray[] = $element[0];
}
Salin selepas log masuk

Ekstrak elemen

    Sekarang, ekstrak elemen daripada tatasusunan berwajaran yang diisih mengikut turutan untuk mendapatkan tatasusunan hancur dalam susunan terkawal kebarangkalian.
  • $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);
    Salin selepas log masuk
  • Kes praktikal
  • Andaikan terdapat permainan yang memerlukan secara rawak memilih 3 item daripada tatasusunan yang mengandungi 5 item. Kebarangkalian setiap item yang muncul ialah:
  • Item 1: 20%
  • Item 2: 30%

    Item 3: 40%

    Item 4: 50%🎜🎜Item 5: 60%🎜🎜Anda boleh tekan Langkah di atas melaksanakan kod berikut: 🎜rrreee🎜Menjalankan kod di atas akan mengeluarkan 3 item yang dilukis dalam susunan terkawal kebarangkalian. 🎜

    Atas ialah kandungan terperinci Bagaimana untuk mengawal susunan penampilan elemen melalui kebarangkalian selepas tatasusunan PHP dikocok?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan