PHP生成带有百分比折扣的折扣代码

PHP生成带有百分比折扣的折扣代码,php,algorithm,Php,Algorithm,我正在制作一个购物网站,为每个人创建一个独特的折扣代码。 我想为此代码生成1%的折扣,例如: x3M2qE=>10% gh2WW4=>20% ... 这些代码的创建方式应确保生成90%的概率远小于生成10%的概率 确定最佳和最优化的算法,并帮助我正确执行, 谢谢。基本上,您需要的是加权随机值。因此,10%的折扣比90%的折扣更常见。下面是我在另一个项目中使用的内容(在Javascript中,但为您将逻辑转换为PHP) 对于每个折扣值,指定您希望查看的频率: frequencies = [

我正在制作一个购物网站,为每个人创建一个独特的折扣代码。
我想为此代码生成1%的折扣,例如:

x3M2qE=>10%
gh2WW4=>20%
...

这些代码的创建方式应确保生成90%的概率远小于生成10%的概率

确定最佳和最优化的算法,并帮助我正确执行,

谢谢。

基本上,您需要的是加权随机值。因此,10%的折扣比90%的折扣更常见。下面是我在另一个项目中使用的内容(在Javascript中,但为您将逻辑转换为PHP)

对于每个折扣值,指定您希望查看的频率:

frequencies = [50, 20, 15, 10, 5,  5,  5,  5]
               5%  10% 20% 30% 40% 70% 80% 90%    <-- reference values for %
  • 如果选择的随机数为47,则47大于0,并且 小于frequenciesborders[0](50),因此适合10%的范围
  • 如果您选择的随机数为78,比frequenciesborders[1](70)大78,比frequenciesborders[2](85)小78,则它适合60%的范围
通过调整频率值,可以改变“范围大小”。范围越大,随机数在该范围内的变化就越大

在循环中多次运行此操作,以确保它为您提供可接受的结果。我对您的财务成功与折扣不负责任:-)

显示此算法的“视觉”方式是:

0                                                50        70                       85        95   100  105  110  115
-------------------------------------------------------------------------------------------------------------------
< 5%                                             >< 10%    >< 20%                   >< 30%    ><40%><70%><80%><90%>
050705100110115
-------------------------------------------------------------------------------------------------------------------
< 5%                                             >< 10%    >< 20%                   >< 30%    >

随机数在0到115之间。范围越大,折扣率越高。

基本上,您需要的是加权随机值。因此,10%的折扣比90%的折扣更常见。下面是我在另一个项目中使用的内容(在Javascript中,但为您将逻辑转换为PHP)

对于每个折扣值,指定您希望查看的频率:

frequencies = [50, 20, 15, 10, 5,  5,  5,  5]
               5%  10% 20% 30% 40% 70% 80% 90%    <-- reference values for %
  • 如果选择的随机数为47,则47大于0,并且 小于frequenciesborders[0](50),因此适合10%的范围
  • 如果您选择的随机数为78,比frequenciesborders[1](70)大78,比frequenciesborders[2](85)小78,则它适合60%的范围
通过调整频率值,可以改变“范围大小”。范围越大,随机数在该范围内的变化就越大

在循环中多次运行此操作,以确保它为您提供可接受的结果。我对您的财务成功与折扣不负责任:-)

显示此算法的“视觉”方式是:

0                                                50        70                       85        95   100  105  110  115
-------------------------------------------------------------------------------------------------------------------
< 5%                                             >< 10%    >< 20%                   >< 30%    ><40%><70%><80%><90%>
050705100110115
-------------------------------------------------------------------------------------------------------------------
< 5%                                             >< 10%    >< 20%                   >< 30%    >
随机数在0到115之间。范围越大,折扣率越高。

最佳代码:

$chances = [
    '50%' => 60,
    '10%' => 30,
    '5%' => 5,
    '4%' => 2,
    '3%' => 1,
    '2%' => 1,
    '1%' => 1,
];

$max_chance = 0;
foreach($chances as $key => $val) {
    $max_chance += $val;
}

$rand = mt_rand(1, $max_chance);

$cur = 0;
foreach($chances as $key => $val) {
    $cur += $val;
    if($rand <= $cur)
        echo $key;
}
$chances=[
'50%' => 60,
'10%' => 30,
'5%' => 5,
'4%' => 2,
'3%' => 1,
'2%' => 1,
'1%' => 1,
];
$max_chance=0;
foreach($key=>$val){
$max_chance+=$val;
}
$rand=mt_rand(1$max_chance);
$cur=0;
foreach($key=>$val){
$cur+=$val;
如果($rand最优代码:

$chances = [
    '50%' => 60,
    '10%' => 30,
    '5%' => 5,
    '4%' => 2,
    '3%' => 1,
    '2%' => 1,
    '1%' => 1,
];

$max_chance = 0;
foreach($chances as $key => $val) {
    $max_chance += $val;
}

$rand = mt_rand(1, $max_chance);

$cur = 0;
foreach($chances as $key => $val) {
    $cur += $val;
    if($rand <= $cur)
        echo $key;
}
$chances=[
'50%' => 60,
'10%' => 30,
'5%' => 5,
'4%' => 2,
'3%' => 1,
'2%' => 1,
'1%' => 1,
];
$max_chance=0;
foreach($key=>$val){
$max_chance+=$val;
}
$rand=mt_rand(1$max_chance);
$cur=0;
foreach($key=>$val){
$cur+=$val;

如果($rand)如果我写了最佳代码,我会展示它!如果我写了最佳代码,我会展示它!感谢lottttttt,你的代码中的PieceFrequencieses[I]是什么?啊嘘**我错过了一个,我会编辑2秒。这是在3D俄罗斯方块游戏中用来选择下一个片段的…感谢lottttttt,PieceFrequencieses[I]是什么在你的代码中?啊嘘**我错过了一个,我将在2秒钟内编辑。这是在一个3D俄罗斯方块游戏中用来选择下一个片段的。。。