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 (1 - 4)
byther
post 17.06.2004, 10:02:47
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 15.06.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


  1. <?php
  2. function kzk($druzyny) {
  3. $vs = array(); $ilosc = count($druzyny);
  4. for ($a = 0; $a < $ilosc; $a++) {
  5. for ($b = 0; $b < $ilosc; $b++) {
  6. if ($a > $b) {
  7. $vs[] = array($druzyny[$a], $druzyny[$b]);
  8. }
  9. }
  10. } return $vs;
  11. }
  12.  
  13. $druzyny = array(
  14. 'Drużyna A',
  15. 'Drużyna B',
  16. 'Drużyna C',
  17. 'Drużyna D',
  18. );
  19.  
  20. // zrób użytek z array_rand() :-)
  21. foreach (kzk($druzyny) as $d) {
  22. echo &#092;"{$d[0]} - {$d[1]}n\";
  23. }
  24. ?>


pzdr.
byther

Ten post edytował byther 17.06.2004, 10:06:40


--------------------
Sygnaturka: jest
Go to the top of the page
+Quote Post
scanner
post 17.06.2004, 10:22:21
Post #3





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
Fibolg
post 17.06.2004, 10:35:08
Post #4





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

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


scanner , gdybym mógło to bym Cie uściskał smile.gif Dzięki wielkie! Dokładnie o to mi chodziło! Jeszcze tylko powiązanie z BD i gotowe. Dzięki raz jeszcze!

<-- dodane później tongue.gif -->

To może ktoś jeszcze pomorze mi zapisywać te pary do tablicy? Mam tablice następującą LOSOWANIA:


| ID | FTURNIEJ | FTEAM1 | FTEAM2 | TEAM1WYNIK | TEAM2WYNIK | DATAMECZU |

I tak: Z tablicy przypisującej drużynę do turnieju wybieram wszystkie TEAMy, które biorą udział w turnieju. Zapisuję ich ID do tej tablicy.... i jak teraz zapisać te pary do takiej tablicy? Mam już coś zmajstrowane, ale nie bardzo działa... zapisuje tylko pierwszy rekord jakoś dziwnie tiredsmiley.gif

Ten post edytował Fibolg 21.06.2004, 10:17:25


--------------------
Go to the top of the page
+Quote Post
scanner
post 22.06.2004, 08:24:49
Post #5





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




Pokaż co już masz.


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

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 - 06:12