Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]mt_rand bez powtórzeń
Forum PHP.pl > Forum > Przedszkole
Wykrywacz
Siema, czy możecie pomóc wskazać mi gdzie robię błąd w założeniach? Bo kręci mi tym aż do czasu wywalenia timeouta.

Oczywiście chodzi mi o losowanko bez powtórzeń winksmiley.jpg

  1. function losowanie($zakres){
  2. return mt_rand(1,$zakres);
  3. }
  4. $tablica = array(0);
  5. for ($i=0;$i<10;$i++){
  6. do {
  7. $wynik = losowanie(100);
  8. } while (array_key_exists($wynik,$tablica) == false);
  9. $tablica +=$wynik;
  10. echo $tablica.'<br />';
  11. }
dr_bonzo
array_key_exists sprawdza czy indeks tablicy istnieje, a nie element.
Wykrywacz
No dobra to jak by jeszcze jakiś ćwok zamiast pomyśleć używał wyszukiwania to wklejam rozwiązanie jakie zrobiłem.

  1. for ($i=0;$i<10;$i++){
  2. do {
  3. $wynik = mt_rand(1,10);
  4. } while (isset($tablica[$wynik]));
  5. $tablica[$wynik] =$wynik;
  6. }
  7. foreach ($tablica as $klucz){
  8. echo $tablica[$klucz].'<br />';
  9. }


edit. jeszcze ładnie skróciłem aby nie robić wiochy
zegarek84
  1. function losowanie($zakres){return mt_rand(1,$zakres);}
  2.  
  3. $tablica = array(0);
  4. for ($i=0;$i<10;$i++){
  5. do {$wynik = losowanie(100);} while (array_key_exists($wynik,$tablica) == false); //cała ta linijka jest wewnętrzną petlą gdzie wykonałeś pierwszy krok przy do a następnie nic nie robisz tylko sprawdzasz warunek w while podczas gdy w tym while nawet wartości nie zmieniasz tylko sprawdzasz do oporu - nie daleś klamry i kończy się na sredniku - no ale po co Ci pętla taka w pętli for?questionmark.gif
  6. //tu jest dalsza cześć pętli for - popraw sobie wcięcia ;)
  7. $tablica +=$wynik;
  8. echo $tablica.'<br />';
  9. }
Wykrywacz
Dzięki ale już se poradziłem issetem. winksmiley.jpg Co jest wyżej winksmiley.jpg
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.