Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
WBOYasal
2024-05-02 18:51:02970semak imbas

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];

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

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

shuffle($array);

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

使用 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);

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];
});

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];
}

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);
  • 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!

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