Generowanie losowych liczb w PHP bez powtórzeń (funkcja losująca).: Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
m |
m (Zastępowanie tekstu - "<source lang="php">" na "<pre>") |
||
Linia 8: | Linia 8: | ||
Poniżej mój gotowiec, wykorzystujący rekurencję. | Poniżej mój gotowiec, wykorzystujący rekurencję. | ||
< | <pre> | ||
function wylosuj_liczby_bez_powtorzen($najmniejsza,$najwieksza,$ilosc,$wykluczone='',$i='0') | function wylosuj_liczby_bez_powtorzen($najmniejsza,$najwieksza,$ilosc,$wykluczone='',$i='0') | ||
{ | { | ||
Linia 30: | Linia 30: | ||
Przykład użycia | Przykład użycia | ||
< | <pre> | ||
wylosuj_liczby_bez_powtorzen(1,50,15); | wylosuj_liczby_bez_powtorzen(1,50,15); | ||
</source> | </source> |
Wersja z 17:23, 15 lut 2018
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<<