Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Losowanie niepowtarzalnych liczb
Forum PHP.pl > Forum > Przedszkole
Yeti6
Witam!

W jaki sposób wygenerować zestaw liczb z przedziału np. 1 do 500 tak aby nie powtarzały się? Używam do tego pętli i funkcji rand(), ale niestety liczby dość często się powtarzają. 
piotrooo89
mt_rand
erix
Wciskasz do tablicy te liczby i sprawdzasz przez in_array" title="Zobacz w manualu PHP" target="_manual, czy już jest.

Albo poszukaj implementacji wariacji bez powtórzeń.
seth-kk
Cytat(erix @ 20.06.2009, 18:10:16 ) *
Wciskasz do tablicy te liczby i sprawdzasz przez in_array" title="Zobacz w manualu PHP" target="_manual, czy już jest.

Albo poszukaj implementacji wariacji bez powtórzeń.

lepiej najpierw wypelnic tablice liczbami i losowac element i wycinac go (kolejne losowania maja miejsce na pozostalych)
Spawnm
a może zrobić tablicę , potem shuffle" title="Zobacz w manualu PHP" target="_manual i wyświetlić pierwsze x znaków
ew. array_rand" title="Zobacz w manualu PHP" target="_manual tylko nie pamiętam czy wyniki mogą się powtarzać ...
Fixus
Cytat(seth-kk @ 20.06.2009, 16:21:31 ) *
lepiej najpierw wypelnic tablice liczbami i losowac element i wycinac go (kolejne losowania maja miejsce na pozostalych)


ale tu dochodzi problem tego, że jak wytniesz coś ze środka musisz wszystko przesunąć a to strata czasu i zasobów.

Prostym rozwiązaniem jest wylosowanie liczby, i wrzucenie do $tablica[$i]
następnie wylosowanie i sprawdzenie z $tablica za pomocą in_array(). jeśli się powtarza losować dalej, jak się nie powtarza wrzucić do tablicy $tablica[$i+1]
athei
Kod
$los = range(1, 500); //zakres
shuffle($los); //miesza

$liczby = array_slice($los, 0, 30); // Ilość liczb do wyświetlenia
print_r($liczby);
Wicepsik
Cytat(piotrooo89 @ 20.06.2009, 18:09:04 ) *

Niestety, twój sposób nie działa smile.gif

  1. <?php
  2. for($i=0;$i<10;$i++){
  3.    echo mt_rand(1, 10).'<br>';
  4. }
  5. ?>

Kod
1
8
8
7
6
3
4
2
10
9




kodzik
  1. <?php
  2. $tab = range($min, $max);
  3. $wylosowane = array_rand($tab, $ilosc);
  4. ?>
Spawnm
mt_rand to takie lepsze rand, rzadziej się liczby powtarzają zaraz po sobie czyli 11233.

Wicepsik, z tym array_rand sprawdzałeś , jednak się nie powtarzają ? smile.gif
Wicepsik
Cytat(Spawnm @ 20.06.2009, 19:35:45 ) *
mt_rand to takie lepsze rand, rzadziej się liczby powtarzają zaraz po sobie czyli 11233.

Wicepsik, z tym array_rand sprawdzałeś , jednak się nie powtarzają ? smile.gif

Zawsze testuje kody które podaję na forum winksmiley.jpg
Szunaj85
Może ten skrypt ci podpasuje. snitch.gif
  1. <?php
  2.  $liczby = range(1,500); //zakres liczb do wylosowania
  3.  $klucze = array_rand($liczby, 5); //ilość liczb do wylosowania
  4.  foreach($klucze as $klucz)
  5.  {
  6.    echo $liczby[$klucz]; //wyświetla wynik    
  7.  }
  8.  ?>
erix
~Szunaj85, gdybyś zerknął nieco wcześniej, zobaczyłbyś że ten kod już jest...

Nie przesadzajmy, już jest tyle rozwiązań, wystarczy...
Yeti6
Dziękuję wszystkim za pomoc, array_rand jednak dał radę smile.gif  

Pozdrawiam!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.