Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja losująca pary do turnieju...
Forum PHP.pl > Forum > PHP
Fibolg
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
byther
  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
scanner
  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.
Fibolg
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
scanner
Pokaż co już masz.
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.