PHP Генератор случайных чисел, большую часть времени хочу 0 - PullRequest
1 голос
/ 07 мая 2020

Как я могу заставить этот PHP Генератор случайных чисел выводить "0" большую часть времени. считайте, что это код кэшбэка Google Pay, большую часть времени мы не получаем кэшбэк, просто так. В 50-70% случаев код должен выводить только «0». Более высокие числа должны появиться только несколько раз.

<?php
srand(time());
mt_srand(time());
echo mt_rand(0,20) . "<br>";
?>

другая идея - использовать следующий код, есть ли лучший вариант?

<?php
function randomName() {
    $names = array(
        '0',
        '0',
        '0',
        '0',
        '1',
        '2',
        '3',
        '4',
        '5',
        '6',
        '7',
        '8',
        '9',
        '10',
        '11',
        '12',
        '13',
        '14',
        '15',
        '16',
        '17',
        '18',
        '19',
        '20',
        '0',
        '0',
        '0',
        '0',
        '0',
        '0',
        '0',
        '0',
        '0',
        '0',
        '0',
        '0',
        // and so on

    );
    return $names[rand ( 0 , count($names) -1)];
}

print randomName();
?>

Ответы [ 3 ]

1 голос
/ 07 мая 2020

Подобно ответу Ника, но более жестко запрограммировано. Расширьте диапазон случайных чисел (здесь я использую 0-50), но вычтите 30, чтобы обозначить диапазон от 20 до -30, а затем используйте max() с 0, чтобы сделать все отрицательные числа 0 ...

echo max(0, mt_rand(0, 50)-30);
1 голос
/ 07 мая 2020

Один из способов решить эту проблему - увеличить диапазон вашего вызова до mt_rand и сделать его верхнюю часть сопоставленной со значением 0. Например:

mt_srand(time());
$pct_zero = 70;
$raw =  mt_rand(0,floor(20*100/(100-$pct_zero)));
$raw = $raw > 20 ? 0 : $raw;
echo $raw;
0 голосов
/ 07 мая 2020

Я думаю, вы можете просто заполнить массив, который покрывает 50-70% массива, 0. Затем вы можете просто случайным образом сгенерировать индекс массива, и вы должны получить 0 50-70% раз.

<?php

$arr = [0,0,0,0,0,0,0,0,10,15,20,25];
shuffle($arr);

for($i=1;$i<=10;++$i){
  echo $arr[rand(0,count($arr)-1)],"\n";
}

Демо: http://sandbox.onlinephpfunctions.com/code/c2bfb5a97e161d4c3e18cc264459e88f3c17fec0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...