Maison  >  Article  >  développement back-end  >  Comment contrôler l'ordre d'apparition des éléments par probabilité après le mélange du tableau PHP ?

Comment contrôler l'ordre d'apparition des éléments par probabilité après le mélange du tableau PHP ?

WBOY
WBOYoriginal
2024-05-02 18:51:02970parcourir

Méthodes en PHP pour contrôler l'ordre d'apparition des éléments d'un tableau en fonction de la probabilité : Perturber l'ordre du tableau : utilisez la fonction shuffle(). Attribuer des probabilités : utilisez array_map() pour attribuer une probabilité (0-1) à chaque élément. Trier le tableau pondéré : trier le tableau par ordre décroissant de probabilité (les éléments ayant la probabilité la plus élevée en premier). Extraire des éléments : extrayez les éléments du tableau trié dans l'ordre, c'est-à-dire brouillez le tableau dans un ordre contrôlé par probabilité.

Comment contrôler lordre dapparition des éléments par probabilité après le mélange du tableau PHP ?

Utiliser le contrôle de probabilité en PHP pour perturber l'ordre d'apparition des éléments du tableau

La perturbation de l'ordre des éléments du tableau est une exigence courante dans de nombreux scénarios de développement, tels que les tirages aléatoires, les mécanismes de jeu, etc. Si vous devez contrôler l'ordre d'apparition des éléments en fonction de leur probabilité après avoir mélangé le tableau, PHP fournit les fonctions et méthodes appropriées.

Préparation

Tout d'abord, préparez un tableau contenant les éléments que vous souhaitez brouiller. Par exemple :

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

Utilisez la fonction shuffle() pour mélanger le tableaushuffle() 函数打乱数组

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

shuffle($array);

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

使用 array_map()

La fonction shuffle() peut mélanger l'ordre des éléments dans le tableau.

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

Utilisez des probabilités pour contrôler l'ordre dans lequel les éléments apparaissent

Utilisez la méthode array_map() pour parcourir les éléments du tableau et attribuer une probabilité à chaque élément. La valeur de probabilité va de 0 à 1, où 0 signifie que l'élément n'apparaîtra jamais et 1 signifie que l'élément apparaîtra toujours.

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

Trier le tableau pondéré

Triez le tableau pondéré, l'élément avec la probabilité la plus élevée sera au début du tableau.

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

Extraire des éléments

    Maintenant, extrayez les éléments du tableau pondéré trié en séquence pour obtenir un tableau brouillé dans un ordre contrôlé par probabilité.
  • $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);
  • Cas pratique
  • Supposons qu'il existe un jeu qui nécessite de sélectionner au hasard 3 éléments dans un tableau contenant 5 éléments. La probabilité que chaque élément apparaisse est :
  • Article 1 : 20 %
Article 2 : 30%

Article 3 : 40%

Article 4 : 50%🎜🎜Article 5 : 60%🎜🎜🎜Vous pouvez appuyer sur Les étapes ci-dessus implémentent le code suivant : 🎜rrreee🎜Exécutez le code ci-dessus et le résultat sera 3 éléments dessinés dans un ordre contrôlé par probabilité. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn