首頁  >  文章  >  後端開發  >  PHP數組打亂順序後如何透過機率控制元素的出現順序?

PHP數組打亂順序後如何透過機率控制元素的出現順序?

WBOY
WBOY原創
2024-05-02 18:51:02970瀏覽

PHP 中以機率控制數組元素出現順序打亂的方法:打亂數組順序:使用 shuffle() 函數。分配機率:使用 array_map() 為每個元素分配機率(0-1)。排序加權數組:依機率降序排序數組(機率高的元素在前)。提取元素:依序從排序後的陣列中提取元素,即得按機率控制順序的打亂數組。

PHP數組打亂順序後如何透過機率控制元素的出現順序?

PHP 中使用機率控制打亂陣列元素的出現順序

打亂陣列的元素順序是諸多開發場景中常見的需求,例如,隨機抽獎、遊戲機制等。如果需要在打亂數組後按機率控制元素的出現順序,PHP 提供了適當的函數和方法。

準備工作

首先,準備一個包含要打亂元素的陣列。例如:

$array = [1, 2, 3, 4, 5];

使用shuffle() 函數打亂數組

shuffle() 函數可以打亂數組中元素的順序。

shuffle($array);

使用機率控制元素出現的順序

使用 array_map() 方法遍歷陣列元素,為每個元素分配一個機率。機率值介於 0 到 1 之間,其中 0 表示該元素永遠不會出現,1 表示該元素始終出現。

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

排序加權數組

對加權數組進行排序,機率較高的元素將處於數組開頭。

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

提取元素

現在,從排序後的加權數組中依次提取元素,即可獲得按機率控制順序的打亂數組。

$reorderedArray = [];
foreach ($weightedArray as $element) {
    $reorderedArray[] = $element[0];
}

實戰案例

假設有一個遊戲,需要從一個包含 5 個物品的陣列中隨機抽取 3 個物品。每個物品出現的機率分別為:

  • 物品1:20%
  • 物品2:30%
  • #物品3:40%
  • 物品4:50%
  • 物品5:60%

可以上述步驟實作如下程式碼:

$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);

執行以上程式碼,將輸出以機率控制順序抽取的3 個物品。

以上是PHP數組打亂順序後如何透過機率控制元素的出現順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn