Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Losowanie bez powtórki
owned
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 1
Dołączył: 27.12.2007

Ostrzeżenie: (0%)
-----


Witam!
Napisałem skrypt który losowo ładuje pliki .php:

  1. $los_tab = Array('onas','oferta','kontakt');
  2. $los_tab_a = count($los_tab);
  3. $random_amount = (count($los_tab))-1;
  4. $los_b = rand(0,$random_amount);
  5.  
  6. function wybierz_losowo($atrybut) {
  7. global $random_amount;
  8. global $los;
  9.  
  10. do {
  11. $los=rand(0,$random_amount);
  12. } while ($los==$atrybut);
  13. return $los;
  14. };
  15.  
  16. switch ($id) {
  17.  
  18. case 'onas':
  19. wybierz_losowo(0);
  20. include('include/'.$los_tab[$los].'_mini.php');
  21. break;
  22.  
  23. case 'oferta':
  24. wybierz_losowo(1);
  25. include('include/'.$los_tab[$los].'_mini.php');
  26. break;
  27.  
  28. case 'kontakt':
  29. wybierz_losowo(2);
  30. include('include/'.$los_tab[$los].'_mini.php');
  31. break;
  32.  
  33. default:
  34. if($id=='' || $id=='home'){
  35. wybierz_losowo(2);
  36. include('include/'.$los_tab[$los].'_mini.php');
  37. }else {
  38. include('include/'.$los_tab[$los_b].'_mini.php');
  39. };
  40. break;
  41.  
  42. }


funkcja 'wybierz losowo' wybierze losowo element z tablicy $los_tab oprocz $los_tab[$atrybut]

Wszystko elegancko działa. Problem polega na tym, że niekiedy randomizer losuję kilka razy z rzędu ten sam element tablicy. Prosiłbym o pomoc w udoskonaleniu tego skryptu tak aby za każdym razem wylosował inny element.

Ten post edytował owned 2.09.2009, 22:28:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
michal_robak
post
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 12
Dołączył: 13.05.2006

Ostrzeżenie: (0%)
-----


skoro masz tu tylko los od 0 do 3 to za wiele nie poszalejesz (IMG:style_emoticons/default/smile.gif) . A random na takim duzym zakresie bedzie Ci sie baaaardzo często powatrzał chyba ze zrobisz tablicę ... $wylosowane i w momencie wylosowania liczby dodajesz ją do tej tablicy. Potem juz przy drugim losowaniu sprawdzasz czy wylosowana liczba znajduje się w tej tabeli (funkcja in_array dla podpowiedzi) i jeżeli jej tam nie ma to wychodzisz z pętli. Gdybys miał duuuuzy zakres to sprawa prostsza. Tworzysz sobie tablice powiezmy od 0 do 100 z takimi samymi wartościami co indeksy bądź z wartością 1 oznaczająca niewylosowaną wartość (do wyboru do koloru). Teraz losujesz liczbe 33 to albo zdejmujesz indeks 33 popem albo ustawiasz wartosc $tablica[33]=0 co oznacza ze wylosowana i losujemy raz jeszcze. Chwila skupienia i rozwiązanie samo przychodzi do głowy. Pozdrawiam i owocnej pracy

EDIT - ops ktoś mnie wyprzedził (IMG:style_emoticons/default/smile.gif)

Ten post edytował michal_robak 2.09.2009, 22:39:29
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 04:20