<?php
  $i 
1000000// How many tests to perform

  // This is my rule list.  Each key is a simple color
  // and each value is a probability represented as a percent
  
$rules = array(
    
'black' => 20,
    
'white' => 10,
    
'red' => 40,
    
'green' => 5,
    
'blue' => 25,
  );

  
// Initialize the scores array with all 0's
  // The "outs" will be used when the probability does not
  // occur in any of the rules
  
$scores = array('outs' => 0);
  foreach(
$rules as $k => $v) { 
    
$scores[$k] = 0;
  }

  
$count count($rules);
$limits=array();
$limit=0;
foreach(
$rules as $k=>$v)
{
    
$limit+=$v;
    
$limits[$k]=$limit;
}
  for(
$x 0$x $i$x++) { 
      
$rand mt_rand(1,100);
      
//$probability = ??; I've tried applying many different operations here to "correct" the probability
foreach($limits as $k=>$v)
{
    if(
$v>=$rand)
    {
        
$scores[$k]++;
        continue(
2);
    }

}
    
$scores['outs']++;
  }


  foreach(
$scores as $k => $v) { 
    echo 
"$k: " . (($v/$i)*100) . "% ($v/$i)\n";
  }

?>