Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Funkcja losująca pary do turnieju..., tak jak w Euro2004 tyle, że bez piłeczek
Fibolg
post 17.06.2004, 08:19:36
Post #1





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Chełmno

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


Czy ktoś się orientuje może czy jest w php funkcja kombinacji bez powtórzeń? Chodzi o to, żeby z tablicy liczb, które są równocześnie kluczami tabeli drużyn rozlosować pary do turnieju, na tej zasadzie, że wybrana para nie uczestniczy w dalszym losowaniu: Np jest osiem drużyn, tablica (1,2,3,4,5,6,7,8). Funkcja z tych ośmiu drużyn powinna rozlosować dwie, które zapisane zostaną w bazie. Powstać musi nowa tablica np. gdy wylosuje 4 i 7: tablica2 (1,2,3,5,6,8). itd...
Jeżeli nie za pomocą takiej funkcji to może ktoś rozwiązywał podobny problem kiedyś w inny sposób? Prosiłbym o sugestie :roll2:
Dziękuję i pozdrawiam


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
scanner
post 17.06.2004, 10:22:21
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




  1. <?php
  2. // Tabela druzyn
  3. $arrTeams = array ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' );
  4. // Tabela par
  5. $arrGames = array();
  6. // numeracja par
  7. $intGame = 1;
  8. // pomieszaj tablice
  9. shuffle( $arrTeams );
  10. // petla, poki nie zestawiono dostpenych par
  11. // jelsi ilosc druzyn nieparzuysta - jedna zostaje niewylosowana
  12. while ( count($arrTeams) > 1 )
  13. {
  14.     // wez pierwszy element
  15.     $arrGames[$intGame]['Home'] = array_shift( $arrTeams );
  16.     // wez ostatni element
  17.     $arrGames[$intGame]['Guest'] = array_pop( $arrTeams );
  18.     $intGame++;
  19. }
  20.  
  21. // wyswietlamy:
  22. foreach( $arrGames as $intGame => $arrGame )
  23. {
  24.     echo 'Game: '.$intGame.'</br />';
  25.     echo '&raquo;Home: Team '.$arrGame['Home'].'<br />';
  26.     echo '&raquo;Guest: Team '.$arrGame['Guest'].'<br /><br />';
  27. }
  28. echo 'Team not included: Team '.$arrTeams[0];
  29. ?>


Update:
1. array_shift" title="Zobacz w manualu PHP" target="_manual() i array_pop" title="Zobacz w manualu PHP" target="_manual() skracają tablicę podaną jako parametr i zwracają poprany z niej element. Więc nie trzeba chodzić po indexach.
2. Można w obydwu przypadkach zastosować tylko jedna funkcję, nt. tylko aray_shift" title="Zobacz w manualu PHP" target="_manual() zdejmującą index 0, ale chciałem pokażać działanie obu tych rzadko stosowanych funkcji.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 18:05