$end = 1000;
$quantity = 10;
function uniq_chars($end, $quantity) {
$xx = 1;
do {
$mt[] = mt_rand(1, $end);
$mx = array_values(array_unique($mt));
$zz = (count($mx) < $quantity) ? $quantity + 1 : $quantity;
} while($xx++< $zz);
return $mx;
}
$end = 1000;
$quantity = 10;
function uniq_chars($end, $quantity) {
$xx = 1;
do {
$mt[] = mt_rand(1, $end);
$mx = array_values(array_unique($mt));
$zz = (count($mx) < $quantity) ? $quantity + 1 : $quantity;
} while($xx++< $zz);
return $mx;
}
function uniq_chars($start, $end, $quantity = 1)
{
$result = [];
do {
$rand = mt_rand($start, $end);
if (!in_array($rand, $result)) {
$result[] = $rand;
}
} while ($quantity > count($result));
return $result;
}
echo '<pre>';
print_r(uniq_chars(1,1000, 10));
echo '</pre>';
$x = 1;
print (int)($x++ > 1); // 0, т.е. false
Цитата (Bezdna @ 27.06.2021 - 00:49) |
но, всё-таки, интересно - почему вместо необходимых 10 цифр иногда получается 9 |
Цитата (killer8080 @ 27.06.2021 - 21:06) |
имена функций и переменных должны быть "говорящими" |
/**
* @param array $conditions
*
* @return bool
* @throws Exception
*/
function checkParameters(array $conditions): bool
{
$result = false;
$error = [];
foreach ($conditions as $condition => $message) {
eval("\$result = $condition;");
if ($result) {
$error[] = $message;
}
}
if (!empty($error)) {
array_unshift($error, 'Невалидные аргументы функции:');
throw new Exception(implode(PHP_EOL, $error));
}
return true;
}
/**
* Возвращает массив уникальных случайных чисел
*
* @param int $start - начальное значение диапазона числа
* @param int $end - конечное значение диапазона числа
* @param int $quantity - количество элементов возвращаемого массива
*
* @return array
* @throws Exception
*/
function getUniqueRandomList(int $start, int $end, int $quantity = 1): array
{
checkParameters([
"empty($end)" => 'Значение ($end) не может быть нулём',
"$start >= $end" => 'Значение ($end) должно быть больше значения ($start)',
"$quantity < 1" => 'Значение ($quantity) длжно быть больше нуля',
]);
$result = [];
do {
$rand = mt_rand($start, $end);
if (!in_array($rand, $result)) {
$result[] = $rand;
}
} while ($quantity > count($result));
return $result;
}
try {
echo '<pre>';
print_r(getUniqueRandomList(1,1000, 10));
echo '</pre>';
} catch (Exception $e) {
echo $e->getMessage();
}