Php слабый генератор случайных значений для случаев, когда повторные значения полезны - PullRequest
0 голосов
/ 15 марта 2020

Я генерирую тестовые данные для использования в моем веб-интерфейсе и хочу создавать возрасты. В настоящее время я генерирую возраст от 18 до 100, используя rand(1,100), например:

require_once 'vendor/autoload.php';
$faker = Faker\Factory::create();

$superstars = array("Adam Cole","Finn Balor","Pete Dunne","Jordan Devlin","Noam Dar");
$fan_favourite_superstar_name = $superstars[ mt_rand( 0, count($superstars) -1 ) ];

$cities = array("London","Manchester","Leeds","Bristol");
$fan_location = $cities[ mt_rand( 0, count($cities) -1 ) ];

$the_models = array("Iphone","Nokia","Huawei","Samsung");
$fan_phone_model = $the_models[ mt_rand( 0, count($the_models) -1 ) ];


$array = Array (
    "0" => Array (
        "id" => uniqid(),
        "fan_favourite_superstar_name" => $fan_favourite_superstar_name,
        "fan_location" => $fan_location,
        "fan_phone_model" => $fan_phone_model,
        "fan_name" => $faker->name,
        "fan_age" => rand(18,100),
        "fan_comments" => $faker->text,
        "fan_picture" => rand(1,500),
        "last_updated" => time() + rand(1,1000),
    ),

Однако я бы хотел, чтобы мои возрасты повторялись, хотя и не полностью. Есть ли слабый генератор случайности, кроме ранда, который может обеспечить случайное повторение генерируемых возрастов n раз?

1 Ответ

1 голос
/ 15 марта 2020

Вот функция, показывающая мое предложение решения:

function getAge($start = 18, $end = 100, $repeat = 20){
    $result = null;
    static $ages = array();
    if ( empty($ages) ) {
        for ($i= $start; $i <= $end; $i++) {
            for($j = 0; $j < $repeat; $j++)
            $ages[] = $i;
        }
    }
    $index = rand(0, count($ages));
    $result = $ages[ $index ];
    unset($ages[ $index ]);
    $ages = array_values($ages);

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