Случайные числа с заданной вероятностью

578
.
Blade, хм, ты прав, как раз начали проходить данный раздел, пошевелив извилинами, можно что-то придумать
.
The Frontend-Warrior
я думаю, мат методы тут использовать будет лишним

по сабжу, набросал такой скрипт, но используется не выроятность выпадания числа, а количество таких чисел в множестве

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 );
.
I'm the Cult of Personality...
Я уже и забыл как здесь интерестно.

Ну чтож и я свой вариантик отдам
/* *
 * $array = array('вариант ответа' => 'процент вероятности')
 */
function randprocent($array = array('da' => '50', 'net' => '30', 'poh' => '20')) {
asort($array);
$endv = end($array);
$r = rand(1, 100); 
foreach($array as $k => $v) 
if($r <= $v || ($r >= $endv && $endv == $v))
return $k;
} 
echo randprocent();

Зы: если найдете преминение этой функции напишите в ЛС
Всего: 13