Блог старого компьютера

Блог старого компьютера


Главная PHP Неповторяющийся рандом PHP

Неповторяющийся рандом PHP

08.11.2012 08:58 Администратор PHP
Печать PDF
Как обычно почти каждый день мне приходится писать какой нибудь код на том или ином языке программирования, сегодняшний день не стал исключением. Сегодня мне потребовалось из своего компонента магазина вывести на главную страницу товары  случайным образом. Ни чего сложного в этом нет, подумал я, и вспомнил про php функцию rand(). Но на пол пути к написанию кода я сообразил что товары на главной странице могут повторятся (особенно если в магазине небольшое колличесвто товара), а это меня не устраивает.

После этого я решил набросать свою небольшую пользовательскую функцию которая бы исключала повторение случайного числа. После пары минут функция была готова, сообственно ее я вам и хочу представить. Сложного в ней ничего нет, но новичку может пригодится данная функция в плане идеи реализации и конечно же в плане повторения php.

function unic_rnd($start, $end, $count){
$array_r =array();
$i=-1;
while($i++<$count){
$rnd = rand($start, $end);
if(!in_array($rnd, $array_r)){
$array_r[] = $rnd;
}
else{
$count=$count+1;
}
}
return $array_r;
}

Функция принимает 3 параметра. Первый параметр это как и у функции rand() это - минимальное генерируемое число, второй по аналогии - максимальное генерируемое число, а вот третий параметр это колличество случайных неповторяющихся чисел которое нам понадобится.

Алгоритм работы функции довольно прост, в цикле генерируем случайное число и добавляем его в массив при условии что в массиве нету такого же числа. Если такое число существует то его не добавляем в массив и добавляем циклу еще одну интерацию.

Пример использования функции таков:

$rnd=unic_rnd(1,1000, 9);

 На выходе мы получаем массив с необходимым колличеством рандомных неповторяющихся чисел:

Array
(
[0] => 678
[1] => 545
[2] => 386
[3] => 599
[4] => 417
[5] => 977
[6] => 984
[7] => 96
[8] => 647
[9] => 844
)

Так же могу предложить использовать в функции вместо rand() функцию mt_rand() на сколько помню она поновее и побыстрее. Вот собственно и все!

Комментарии  

 
+3 #1 Dominator 14.12.2012 15:29
Благодарю. Неплохая идея. Уже поставил к себе. Числа не повторяются.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Поиск

Голосование

Что Вы думаете на счет битрикса?
 

Все материалы раздела