Generowanie losowych liczb w PHP bez powtórzeń (funkcja losująca).
Przejdź do nawigacji
Przejdź do wyszukiwania
Dzisiaj kodując napotkałem na problem związany z generowaniem pseudo losowych liczb, bez powtórzeń.
Oficjalnie PHP nie posiada w sobie takiego mechanizmu więc zacząłem poszukiwania na google hasłem "jak wylosować liczby bez powtórzeń w php".
Niestety żaden pierdolony buc jej nie udostępnił w postaci gotowej (prawdopodobnie uznał że korona mu z głowy spadnie) tak więc wymaganą funkcję musiałem utworzyć samemu.
Poniżej mój gotowiec, wykorzystujący rekurencję.
function wylosuj_liczby_bez_powtorzen($najmniejsza,$najwieksza,$ilosc,$wykluczone='',$i='0')
{
for ($petla=$i;$petla<$ilosc;$petla++)
{
$losowa=rand($najmniejsza,$najwieksza);
if ($wykluczone[$losowa]==$losowa)
{
return wylosuj_liczby_bez_powtorzen($najmniejsza,$najwieksza,$ilosc,$wykluczone,$petla);
}
else
{
$wykluczone[$losowa]=$losowa;
print(">>$losowa<<<br>");
}
}
}
</source>
Przykład użycia
<pre>
wylosuj_liczby_bez_powtorzen(1,50,15);
</source>
*1 - losuj liczby od jeden
*50 - do pięćdziesiąt
*15 - wylosowanych liczb ma być 15
Efekt finalny
<pre>
>>45<<
>>38<<
>>6<<
>>23<<
>>16<<
>>35<<
>>9<<
>>29<<
>>15<<
>>4<<
>>11<<
>>21<<
>>50<<
>>48<<
>>8<<