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.
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ę.
<source lang="php"> 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<<
");
}
}
} </source>
Przykład użycia
<source lang="php"> 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
>>45<< >>38<< >>6<< >>23<< >>16<< >>35<< >>9<< >>29<< >>15<< >>4<< >>11<< >>21<< >>50<< >>48<< >>8<<