Sign in to follow this  
ProfiT

Неповторяющиеся случайные числа

Recommended Posts

Хочу узнать у форумчан, какой php-сценарий нужно применить, чтобы повторения случайных чисел были сведены к минимуму? Если у вас что на примете?

Чистый rand() нет нет, да и выдает одинаковые значения.

Share this post


Link to post
Share on other sites
в хелпе же написано mt_rand

повторяется все равно..

UPD:

нашел решение..

к примеру нужно сгенерировать 5 уникальных чисел в интервале от 0 до 100:

<?php
// раскручиваем генератор
function make_seed() {
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
// генерируем случайное число от 0 до $num
function RandomResult($num){
srand(make_seed());
$randomresult = rand (0, $num);
return $randomresult;
}
// 5 случайных неповторяющихся числа
$randomarray = array();
while(count($randomarray) < 5){
$t = RandomResult(100);
if(!in_array($t, $randomarray)){
$randomarray[] = $t;
}
}
?>

В массиве $randomarray будет 5 неповторяющихся случайных числа :lol:

Share this post


Link to post
Share on other sites

Моя вариация на эту тему :lol:

<?php

/*
$pieces - количество выводимых цифр
$min - от какой цифры мы берем рандом
$max - до какой цифры мы берем рандом
*/
function numbers($pieces, $min, $max){
// Защита от дурака ))
if(($max - $min) < $pieces) $pieces = $max - $min;
// Создаем массив куда будем помещать наши цифры
$arr = array();
// Наш цикл в котором мы выводим цифры
// без повоторений
while($pieces){
$number = mt_rand($min, $max);
if(!in_array($number, $arr))
{
echo "$number
";
$arr[] = $number;
}
else
{
$pieces++;
}
$pieces--;
}
}

numbers(5, 0, 100); // 5 цифр в интервале от 0 до 100

?>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Member Statistics

    46,511
    Total Members
    3,128
    Most Online
    Marking
    Newest Member
    Marking
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.