<?php
function generateRandomWithMode($min,$max,$mode,$size){
if(!($mode >= $min && $mode <= $max)){
throw new Exception("Mode $mode is not between $min and $max range");
}
$half_count = intval($size / 2);
/*
set mode frequency as half of the size + any random value generated between 0 and half_count. This ensures
that the mode you provided as the function parameter always remains the mode of the set of random values.
*/
$mode_frequency = $half_count + rand(0,$half_count);
$random_values = [];
$size -= $mode_frequency;
while($mode_frequency-- > 0) $random_values[] = $mode;
while($size-- > 0) $random_values[] = rand($min,$max);
shuffle($random_values);
return $random_values;
}
print_r(generateRandomWithMode(1,100,4,10));
Array
(
[0] => 4
[1] => 63
[2] => 4
[3] => 4
[4] => 24
[5] => 4
[6] => 4
[7] => 4
[8] => 12
[9] => 4
)