2012-12-15 40 views
5

Tôi không thể tìm ra điều này.Gọi hàm ngẫu nhiên trên phần trăm?

Tôi cần một giải pháp để gọi hàm ngẫu nhiên cho phần trăm của nó.

Ví dụ: có 10% cơ hội mà tập lệnh gọi đăng ký() và 3% cơ hội hệ thống gọi hàm "specialitems()".

Tôi đang mắc kẹt trong này, vì vậy tôi hy vọng ai đó có thể giúp tôi với brainkiller này.

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

Tỷ lệ phần trăm trong nhận xét không khớp với giá trị thực tế. Tại sao có ý kiến ​​ở đó? – GolezTrol

+1

chỉ cần thêm câu hỏi bài tập về nhà để có thể giúp chúng tôi hiểu rõ hơn về những gì bạn đang cố gắng làm. –

+0

Tôi nghĩ câu trả lời của tôi giải quyết vấn đề của bạn –

Trả lời

4

Hãy thử điều này:

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

Tỷ lệ phần trăm không nên thêm vào bất cứ điều gì trên 100. Nếu số tiền là dưới 100, thì phần trăm còn lại là "không làm gì cả."

+0

Tôi thích giải pháp này vì nó đơn giản, nhưng nó sẽ không hoàn toàn 'ngẫu nhiên', vì nó sẽ phụ thuộc vào thứ tự của các cơ hội? – kennypu

+1

@kennypu Không, vì '$ a' là ngẫu nhiên. – irrelephant

-1

Sau đó, để gọi hàm với lớp của bạn và tên $ var chỉ cần thực hiện.

$this->$var(); 
Các vấn đề liên quan