2012-12-15 13 views
5

मैं इसे समझ नहीं सकता।पर्सेंट पर यादृच्छिक कार्य कॉल करें?

मुझे इसके प्रतिशत के लिए एक यादृच्छिक फ़ंक्शन कॉल करने के लिए एक समाधान की आवश्यकता है।

पूर्व। 10% संभावनाएं हैं कि स्क्रिप्ट सदस्यता() और 3% मौका कहती है कि सिस्टम "specialitems()" फ़ंक्शन को कॉल करता है।

मैं इसमें फंस गया हूं, इसलिए मुझे उम्मीद है कि कोई इस ब्राइंकिलर के साथ मेरी मदद कर सकता है।

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