я думаю, мат методы тут использовать будет лишним
по сабжу, набросал такой скрипт, но используется не выроятность выпадания числа, а количество таких чисел в множестве
function createSet( $probabilities ){
$set = array();
foreach( $probabilities as $number=>$qty ){
$gen_sub_set = array_fill( count($set), $qty, $number);
$set = array_merge($set, $gen_sub_set);
}
return $set;
}
function getRandomNumberFromSet( $probabilities ){
$set = createSet( $probabilities );
var_dump($set);
return $set[ array_rand( $set ) ];
}
$array = array(
1 => 10, // 10 = 25% от 40, к примеру
2 => 20,
3 => 4,
4 => 6
);
//var_dump( getRandomNumberFromSet( $array ) );
echo getRandomNumberFromSet( $array );