2012-12-15 12 views
5

Ich kann das nicht herausfinden.Anruf Zufallsfunktion auf Prozente?

Ich brauche eine Lösung, um eine zufällige Funktion für ihren Prozentsatz aufzurufen.

Ex. Es besteht eine Wahrscheinlichkeit von 10%, dass das Skript subscriptions() und 3% Wahrscheinlichkeit aufruft, dass das System die Funktion "specialitems()" aufruft.

Ich bin in diesem stecken, also hoffe ich, dass jemand mir mit diesem brinkiller helfen kann.

<?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

Die Prozentangaben in den Kommentaren stimmen nicht mit den tatsächlichen Werten überein. Warum sind die Kommentare überhaupt da? – GolezTrol

+1

fügen Sie einfach die Hausaufgabenfrage hinzu, damit wir besser verstehen können, was Sie zu tun versuchen. –

+0

Ich denke, meine Antwort löst Ihr Problem –

Antwort

4

Try this:

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

Die Prozentsätze nicht auf etwas über 100 hinzufügen sollten Wenn die Summe unter 100, so wird der verbleibende Prozentsatz ist „nichts tun.“

+0

Ich mag diese Lösung, weil es einfach ist, aber wäre es nicht völlig "zufällig", da es auf die Reihenfolge der Chancen abhängen würde? – kennypu

+1

@kennypu Nein, da '$ a' zufällig ist. – irrelephant

-1

Dann um eine Funktion mit Ihrer Klasse und $ var Namen einfach zu tun.

$this->$var();