2012-12-15 86 views
5

我无法弄清楚这一点。在百分数上调用随机函数?

我需要一个解决方案来为它的百分比调用一个随机函数。

Ex。脚本调用subscriptions()的概率为10%,系统调用函数“specialitems()”的概率为3%。

我被困在这个,所以我希望有人可以帮助我与这个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

注释中的百分比与实际值不匹配。为什么有这些评论呢? – GolezTrol

+1

只是添加作业问题,所以它可以帮助我们更好地理解你想做什么。 –

+0

我认为我的答案可以解决您的问题 –

回答

4

试试这个:

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

的百分比应该不会增加任何超过100。如果总和为100下,然后剩余的百分比是“无所作为”。

+0

我喜欢这个解决方案,因为它很简单,但是它不会完全是“随机的”,因为它取决于机会的顺序吗? – kennypu

+1

@kennypu不,因为'$ a'是随机的。 – irrelephant

-1

然后用你的类和$ var名称调用一个函数就行了。

$this->$var();