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<<