2012-12-15 3 views
5

Je ne peux pas comprendre cela.Appelez la fonction aléatoire sur les pourcentages?

J'ai besoin d'une solution pour appeler une fonction aléatoire pour son pourcentage.

Ex. il y a 10% de chances que le script appelle abonnements() et 3% de chance que le système appelle la fonction "specialitems()".

Je suis coincé dans ceci, donc j'espère que quelqu'un peut m'aider avec ce brainkiller.

<?php 
    class RandomGifts { 
    public $chances = ''; 

    public function __construct($user) { 
      $this->user = $user; 

      //Find percent for each function 
      $this->chances = array( 
       'subscriptions' => 10, // 10% 
       'specialitems' => 3, // 5% 
       'normalitems' => 30, // 40% 
       'fuser'   => 50, // 70% 
       'giftcards'  => 7, // 7% 
     ); 

//This should call the function which has been calculated. 
self::callFunction(?); 

} 

    public function subscriptions(){} 
    public function specialitems(){} 
    public function normalitems(){} 
    public function fuser(){} 
    public function giftcards(){} 

} 
?> 
+1

Les pourcentages en commentaire ne correspondent pas aux valeurs réelles. Pourquoi y a-t-il des commentaires? – GolezTrol

+1

suffit d'ajouter la question de devoirs afin qu'il puisse nous aider à mieux comprendre ce que vous essayez de faire. –

+0

Je pense que ma réponse résout votre problème –

Répondre

4

Essayez ceci:

$a = rand(1, 100); 
$total = 0; 
$f = ''; 
foreach($this->chances as $function => $percent) { 
    $total += $percent; 
    if($a <= $total) { 
     $f = $function; 
     break; 
    } 
} 
if(!empty($f)) 
    $this->$f(); 

Les pourcentages ne doivent pas ajouter à quoi que ce soit au-dessus de 100. Si la somme est inférieure à 100, le pourcentage restant est « ne rien faire. »

+0

J'aime cette solution parce que c'est simple, mais ne serait-elle pas complètement 'aléatoire', puisque cela dépendrait de l'ordre des chances? – kennypu

+1

@kennypu Non, puisque '$ a' est aléatoire. – irrelephant

-1

Ensuite, appeler une fonction avec votre nom de classe et $ var suffit.

$this->$var(); 
Questions connexes