PHP-在与模式X相关的间隔内生成随机数

PHP-在与模式X相关的间隔内生成随机数,php,random,Php,Random,我试图生成随机数,其模式等于X(任何实数)。作为说明,我希望有一个函数的头是rand(int-min,int-max,int-mode),当我使用以下参数rand(min:1,max:6,mode:4)调用它时,生成以下内容: (1,2,4,4,4,5,3) // not exact, but similar 我正在寻找一种优化的方法(尽管手动操作是最糟糕的情况,但我已经没有想法了) 我已经检查了,和其他随机生成函数,但没有找到我要找的 有什么建议吗?用一些理论来解释一下:那么你想要一个随机数

我试图生成随机数,其模式等于X(任何实数)。作为说明,我希望有一个函数的头是
rand(int-min,int-max,int-mode)
,当我使用以下参数
rand(min:1,max:6,mode:4)调用它时,
生成以下内容:

(1,2,4,4,4,5,3) // not exact, but similar
我正在寻找一种优化的方法(尽管手动操作是最糟糕的情况,但我已经没有想法了)

我已经检查了,和其他随机生成函数,但没有找到我要找的


有什么建议吗?

用一些理论来解释一下:那么你想要一个随机数生成器,它能产生更少的随机数?另外,当你给出一个预期结果的例子并加上“不精确,但相似”时,你很难知道你实际预期的是什么。@iainn谢谢你,我会调查的。@MagnusEriksson,是的,但我相信如果你读到这些,你会理解得更多。我知道模式是什么:-)用一些理论来解释它:那么你想要一个随机数生成器,它产生的随机数更少?另外,当你给出一个预期结果的例子,并加上“不精确,但相似”时,你很难知道你实际预期的是什么。@iainn谢谢你,我会调查的。@MagnusEriksson,是的,但我相信你会了解更多,如果你读到的话。我知道什么是模式:-)
<?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
)