Résolu Tirée au sort un chiffre random

Statut
N'est pas ouverte pour d'autres réponses.

Florian.

Premium
Inscription
8 Août 2012
Messages
4 251
Réactions
1 220
Points
14 353
RGCoins
25
Voici un exemple

La personne B a 5Points
La personne C a 10Points

Donc je voudrais faire un tirage au sort mais la personne C aura plus de chance que la personne B de gagnez

Mais je c'est pas part ou me prendre

Si une personne aurais une idée
 
Voici un exemple

La personne B a 5Points
La personne C a 10Points

Donc je voudrais faire un tirage au sort mais la personne C aura plus de chance que la personne B de gagnez

Mais je c'est pas part ou me prendre

Si une personne aurais une idée
Dans une urne tu met dans 2 fois le nom de la personne C et une fois le nom de la personne B
 
Y'a environ 150 personnes, y'en a qui ont 6points d'autre 10 ect puis ce que tu ma dit m'avance a rien :'(
Sur 150 personne : Dans une urne tu met 2 fois le nom de ce qui ont 10 point (plus de chance que ca soit eux)
et 1 fois le nom qui de ceux qui ont 6 point

Et puis tu tire au sort c'est aussi simplet que ca ;)
 
Sur 150 personne : Dans une urne tu met 2 fois le nom de ce qui ont 10 point (plus de chance que ca soit eux)
et 1 fois le nom qui de ceux qui ont 6 point

Et puis tu tire au sort c'est aussi simplet que ca ;)
Tu es loin d'avoir résolu vu que je vais pas passez comme ça sa va prendre trop de temps et pas sur que sa fonctionne
 
Fait avec une base de données avec une colonnes crédits et la c'est le nombre après tu fait un random suivant le nombre de crédits il est mît plus ou moins de fois
 
Fait avec une base de données avec une colonnes crédits et la c'est le nombre après tu fait un random suivant le nombre de crédits il est mît plus ou moins de fois
Pas compris j'ai bidouiller un pti truck

PHP:
<?php
                {
    $SQL = $odb->prepare("SELECT sum(points) AS points FROM GIVEAWAY");
    $SQL->execute();
    $SQLResult3 = $SQL->fetch();
                       
            $pourcetage = ($SQLResult3['points'] / 100);   
    $SQL1 = $odb->prepare("SELECT COUNT(*) AS points FROM GIVEAWAY");
    $SQL1->execute();
    $SQLResult2 = $SQL1->fetch();
   
    $total = ($SQLResult3['points'] * $pourcetage);
                       
               
                }
                $SQLGetLogs = $odb -> query("SELECT * FROM `GIVEAWAY`");
                while($getInfo = $SQLGetLogs -> fetch(PDO::FETCH_ASSOC))
                {
                    $username = $getInfo['pseudo'];
                    echo ''.$total.'% pour '.$username.'<br>';
                }                   
                ?>

Mais sa fonctionne pas trop :@
 
C'est pas un tirage au sort si tu privilégies les membres ayant plus de points.

Si tu veux un tirage au sort parmis les membres ayant le plus de points, il suffit simplement de selectionner les utilisateurs correspondant via une clause where, ou via un order (pour trier la liste).
 
C'est pas un tirage au sort si tu privilégies les membres ayant plus de points.

Si tu veux un tirage au sort parmis les membres ayant le plus de points, il suffit simplement de selectionner les utilisateurs correspondant via une clause where, ou via un order (pour trier la liste).
Par exemple tu a participer a mon concours et tu a 10points et moi j'en ai 5 tu aura plus de chance de gagner que moi au tirage au sort et je voudrais calculer ceci
 
Par exemple tu a participer a mon concours et tu a 10points et moi j'en ai 5 tu aura plus de chance de gagner que moi au tirage au sort et je voudrais calculer ceci

Oui, j'ai bien compris.

Sauf que le tirage au sort est par définition du hasard.
Là, tu augmentes la probabilité de gagner en fonction d'un classement (ton système de points). Par conséquent ce n'est pas un tirage au sort.

Lors d'un tirage au sort, on prend théoriquement les participations en compte. Si le membre a participé plusieurs fois, il a, mathématiquement, plus de chance d'être tiré au sort.

Mais a priori, dans ton tirage au sort c'est sur une base de données en fonction d'un nombre de points et non d'un nombre de participation, c'est bien ça?


La seule solution que je vois là comme ça :
PHP:
<?php

// La liste des utilisateurs
$users = array(
    array('nom' => 'Jean', 'points' => 5),
    array('nom' => 'Pierre', 'points' => 10),
    array('nom' => 'Marc', 'points' => 20),
    array('nom' => 'Paul', 'points' => 5),
    array('nom' => 'Romain', 'points' => 10),
    array('nom' => 'Arnaud', 'points' => 20),
    array('nom' => 'Thomas', 'points' => 40),
);

$listMembers = array();

foreach($users as $u){
    // On multiplie les chances d'apparaitre dans le tableau en fonction des points
    switch($u['points']){
        case 5:
            $multiplier = 1;
        break;
        case 10:
            $multiplier = 2;
        break;
        case 20:
            $multiplier = 3;
        break;
        case 30:
            $multiplier = 4;
        break;
        case 40:
            $multiplier = 5;
        break;
    }

    for($i=0; $i < $multiplier; $i++){
        $listMembers[] = $u['nom'];
    }

}

// si on veut melanger le tableau, il faut décommenter la ligne ci-dessous
//shuffle($listMembers);

print '<pre>';
print_r($listMembers);
print '</pre>';

// selectionne une valeur au hasard dans le tableau
$gagnant = array_rand($listMembers);
echo '<p>Le membre gagnant est <b>'.$listMembers[$gagnant].'</b></p>';

En gros ça va créer un tableau contenant tout les membres que tu veux tirer au sort.
Un membre ayant plus de points apparaitra plusieurs fois (c'est le switch & la boucle for), augmentant ainsi ses chances de gagner.

A adapter en fonction de ton code.. Mais comme dit, c'est pas vraiment un tirage au sort ;)
 
Dernière édition:
Cette réponse a aidé l'auteur de cette discussion !
Oui, j'ai bien compris.

Sauf que le tirage au sort est par définition du hasard.
Là, tu augmentes la probabilité de gagner en fonction d'un classement (ton système de points). Par conséquent ce n'est pas un tirage au sort.

Lors d'un tirage au sort, on prend théoriquement les participations en compte. Si le membre à participé plusieurs fois, il a, mathématiquement, plus de chance d'être tiré au sort.

Mais a priori, dans ton tirage au sort c'est sur une base de données en fonction d'un nombre de points et non d'un nombre de participation, c'est bien ça?


La seule solution que je vois là comme ça :
PHP:
<?php

// La liste des utilisateurs
$users = array(
    array('nom' => 'Jean', 'points' => 5),
    array('nom' => 'Pierre', 'points' => 10),
    array('nom' => 'Marc', 'points' => 20),
    array('nom' => 'Paul', 'points' => 5),
    array('nom' => 'Romain', 'points' => 10),
    array('nom' => 'Arnaud', 'points' => 20),
    array('nom' => 'Thomas', 'points' => 40),
);

$listMembers = array();

foreach($users as $u){
    // On multiplie les chances d'apparaitre dans le tableau en fonction des points
    switch($u['points']){
        case 5:
            $multiplier = 1;
        break;
        case 10:
            $multiplier = 2;
        break;
        case 20:
            $multiplier = 3;
        break;
        case 30:
            $multiplier = 4;
        break;
        case 40:
            $multiplier = 5;
        break;
    }

    for($i=0; $i < $multiplier; $i++){
        $listMembers[] = $u['nom'];
    }

}

// si on veut melanger le tableau, il faut décommenter la ligne ci-dessous
//shuffle($listMembers);

print '<pre>';
print_r($listMembers);
print '</pre>';

// selectionne une valeur au hasard dans le tableau
$gagnant = array_rand($listMembers);
echo '<p>Le membre gagnant est <b>'.$listMembers[$gagnant].'</b></p>';

En gros ça va créer un tableau contenant tout les membres que tu veux tirer au sort.
Un membre ayant plus de points apparaitra plusieurs fois (c'est le switch), augmentant ainsi ces chances de gagner.

A adapter en fonction de ton code.. Mais comme dit, c'est pas vraiment un tirage au sort ;)
Merci de ton aide :bave: je vais test c'est vrai que j'avais pas trouver le mot juste donc j'ai mis tirage au sort
 
Merci de ton aide :bave: je vais test c'est vrai que j'avais pas trouver le mot juste donc j'ai mis tirage au sort

Si tu veux visualiser la probabilité, ajoute ça tout en haut de mon script :
PHP:
session_start();

et ça tout à la fin :
PHP:
if(isset($_SESSION[$listMembers[$gagnant]])){
    $_SESSION[$listMembers[$gagnant]] = $_SESSION[$listMembers[$gagnant]] + 1;
}
else {
    $_SESSION[$listMembers[$gagnant]] = 1;
}

print '<pre>';
print_r($_SESSION);
print '</pre>';

Ca compte le nombre de fois ou un membre est apparu.

Tu réactualises ta page plusieurs fois.. Tu verras alors que Jean & Paul (qui n'ont que 5 points) apparaissent moins souvent. ;)
 
Si tu veux visualiser la probabilité, ajoute ça tout en haut de mon script :
PHP:
session_start();

et ça tout à la fin :
PHP:
if(isset($_SESSION[$listMembers[$gagnant]])){
    $_SESSION[$listMembers[$gagnant]] = $_SESSION[$listMembers[$gagnant]] + 1;
}
else {
    $_SESSION[$listMembers[$gagnant]] = 1;
}

print '<pre>';
print_r($_SESSION);
print '</pre>';

Ca compte le nombre de fois ou un membre est apparu.

Tu réactualises ta page plusieurs fois.. Tu verras alors que Jean & Paul (qui n'ont que 5 points) apparaissent moins souvent. ;)
(bave) merci je pense que sa va être résolu :)
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut