2012-12-15 21 views
5

Bunu çözemiyorum.Yüzde rasgele işlev çağırma?

Yüzde değeri için rastgele bir işlevi çağırmak için bir çözüme ihtiyacım var.

Ex. komut dosyasının abonelikler() ve% 3'lük sistemin "specialitems()" işlevini çağırması olasılığını% 10 şansı vardır.

Bu işin içinde sıkışıp kaldım, bu yüzden birisinin bu beyin tıkacı ile bana yardımcı olabileceğini umuyorum.

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

Yorumlardaki yüzdeler gerçek değerler ile uyuşmuyor. Yorumlar neden orada? – GolezTrol

+1

sadece ödev sorusunu ekleyin, böylece ne yapmaya çalıştığınızı daha iyi anlamamıza yardımcı olabilir. –

+0

Sanırım cevabınız sorununuzu çözüyor –

cevap

4

bu deneyin: toplamı 100'ün altında ise

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

yüzdeleri 100'den yukarı şey eklemek gerekir, daha sonra kalan yüzde "hiçbir şey" dir.

+0

Bu çözümü seviyorum çünkü basit, ancak şansın sırasına bağlı olacağından tamamen rastgele olmaz mıydı? – kennypu

+1

@kennypu Hayır, $ a 'rasgele olduğundan. – irrelephant

-1

Sınıfınız ve $ var adınızla bir işlevi çağırmak için yapmanız yeterlidir.

$this->$var(); 
İlgili konular