Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Porownywanie wartosci z tablicy
Forum PHP.pl > Forum > PHP
siatkarzyna
Witam mam taki problem pobieram rekordy z bazy danych z tabeli SPOTKANIA - struktura - | id | id_team1 | id_team2 | tabela zawiera wszytkie spotkania np 12 druzyn kazdy z kazdym czyli 66 rekordow i teraz chcial bym stworzyc nastepna tabele tylko ze tym razem z podzialem na kolejki i tak zeby w kazdej kolejce byly nie powtarzajace sie mecze (wiadomo o co chodzi )

Narazie napisalem kod ktory twowrzy koeljki ale tylko w trzech pierwszych kolejkach spotkania sie nie powtarzaja i ma to zapewne zwiazek z warunkeim w petli if jednak ja nie umiem sobie z tym poradzic.

  1. <?php
  2. $zapytanie = 'SELECT id_team1, id_team2 FROM spotkania';
  3. $wynik = mysql_query($zapytanie) or die (mysql_error());
  4.  
  5. for ($i = 0; $i < $rekord = mysql_fetch_assoc($wynik); $i++) {
  6.  
  7.  
  8. $mecze[] = $rekord;
  9.  
  10.  
  11. }
  12.  
  13.  
  14. for ($k = 0; $k < 10; $k++) {              // tworzy kolejki
  15.  
  16.  
  17.  
  18. $kolejka[$k][] = array($mecze[0][id_team1], $mecze[0][id_team2]);  // wstawia pierwsze spotkanie na poczatku kazdej kolejki
  19.  
  20. $del1 = array (0);                                     // wartosc ktora ma byc usunieta czyli pierwsze spotkanie z tabeli mecze
  21.  
  22.  
  23. for($i = 0; $i <= count($del1) - 1; $i++) {           // petla usuwa z tabeli mecze pierwsze dodane spotkanie
  24.       array_splice($mecze, $del1[$i], 1);
  25. }
  26.  
  27. $o = 0;                                           // wartosc poczatkowa odejmowana w tabeli del
  28.                                          // od ktorego rekordu ma zaczac sprawdzac  tabela mecze
  29.  
  30. $spr = 0;                                         // ktory rekord ma pierwszy porownac z tabeli kolejka
  31. $y = 1;
  32. for ($f = 0; $f < 5; $f++) {                  // tworzy 5 nastepnych spotkan w kolejce
  33.  
  34.  
  35. for ($l = 0; $l < $y; $l++) {                 // wykonuje sie tyle razy ile jest potrzebne ma wykonanie petli if
  36.  
  37.  
  38.  if ($kolejka[$k][$spr][0] != $mecze[$y][id_team1] &&  $kolejka[$k][$spr][1] != $mecze[$y][id_team1] &&  // porownuje po koleji rekordy
  39.            $kolejka[$k][$spr][0] != $mecze[$y][id_team2] &&  $kolejka[$k][$spr][1] != $mecze[$y][id_team2] &&
  40.            $kolejka[$k][$spr][0] && $kolejka[$k][$spr - 1][0] != $mecze[$y][id_team1] &&
  41.            $kolejka[$k][$spr][1] && $kolejka[$k][$spr - 1][1] != $mecze[$y][id_team1] ) {
  42.    
  43.    
  44.    $kolejka[$k][] = array($mecze[$y][id_team1], $mecze[$y][id_team2]);   // dodaje spotkanie do tabeli kolejka
  45.    
  46.    $del[] = array ($y - $o++, );                             // rekordy do usuniecia
  47.    break;
  48.    }
  49.    else {
  50.    
  51.    $y++;
  52.    
  53.    }
  54.  
  55. }
  56.  
  57. $spr++;      
  58.  
  59.  
  60. }
  61.       for($i = 0; $i <= count($del) - 1; $i++) {         // usuwa rekordy z tabeli mecze ktore sa juz dodane do
  62.       array_splice($mecze, $del[$i][0], 1);           // tabeli kolejka
  63. }  
  64.    array_splice ($del, 0, 5);                        // czysci tabele del
  65.    }
  66.    
  67. echo &#092;"TABLICA MECZE\";
  68.  
  69. echo &#092;"\";
  70. print_r( $mecze );
  71. echo &#092;"\";
  72.    echo &#092;"\";
  73. echo &#092;"TABLICA KOLEJKA\";    
  74. echo &#092;"\";
  75. print_r( $kolejka );
  76. echo &#092;"\";
  77.    
  78. echo &#092;"\";
  79. echo &#092;"TABLICA DEL\";
  80. echo &#092;"\";
  81. print_r( $del );
  82. echo &#092;"\";
  83. ?>


Dalej nie rozwiązałem problemu i niestety nikt nie odpowiedział na post myślę cały czas intensywnie i może dało by się zastosować funkcje [b]in_array()[/b] sprawdzała by czy wartosci sa rozne w tablicy ktora sie tworzy KOLEJKA

  1. <?php
  2. if (!in_array(array ($mecze[$y][id_team1], $mecze[$y][id_team2]) , $kolejka[$k])) {
  3.    
  4.    
  5.    $kolejka[$k][] = array($mecze[$y][id_team1], $mecze[$y][id_team2]);   // dodaje spotkanie do tabeli kolejka
  6.        
  7.    $del[] = array ($y - $o++, );                        // rekordy do usuniecia
  8.    
  9.    }
  10.    else {
  11.    
  12.    $y++;
  13.    break;
  14.    }
  15. ?>


z tym ze jesli jedna wartosc jest rozna to in_array zwraca true a ja bym chcial tak zeby oby dwie wartosci byly rozne czyli jak jest

1 - 2 i 1 - 3 to !in_array zwraca true
a powino byc tak np
1 - 2 i 3 -4

prosze o pomoc


--------Edytowane 2008-09-28-----03:18----------------------------------------------------------------------------------------------------------------

Ehhhh nie daje za wygrana wrzucam to co ostatnio wycudowalem i jeszcze znalazlem taka strone cos takiego mi sie marzy http://schedules.footballguys.com/freesche...chedule=12team9

  1. <?php
  2. $zapytanie = 'SELECT id_team1, id_team2 FROM spotkania ORDER BY id_team1 ASC';
  3. $wynik = mysql_query($zapytanie) or die (mysql_error());
  4.  
  5. for ($i = 0; $i < $rekord = mysql_fetch_assoc($wynik); $i++) {
  6.  
  7.  
  8. $mecze[] = $rekord;
  9.  
  10.  
  11. }
  12.  
  13.  
  14.  
  15. for ($k = 0; $k < 11; $k++) {              // tworzy kolejki
  16.  
  17.  
  18. $kolejka[$k][] = array($mecze[0][id_team1], $mecze[0][id_team2]);  // wstawia pierwsze spotkanie na poczatku kazdej kolejki
  19.  
  20. $del1 = array (0,);                                     // wartosc ktora ma byc usunieta czyli pierwsze spotkanie z tabeli mecze
  21.  
  22.  
  23.  
  24. for($i = 0; $i <= count($del1) - 1; $i++) {           // petla usuwa z tabeli mecze pierwsze dodane spotkanie
  25.       array_splice($mecze, $del1[$i], 1);
  26. }
  27.  
  28.  
  29. $wynik = count ($mecze);
  30. echo $wynik . &#092;" || \";
  31. $wynik2 = $wynik;
  32.  
  33. $o = 0;
  34. $spr = 0;
  35. for ($p = 0; $p < $wynik2; $p++){
  36.  
  37.  
  38. $a = array ($mecze[$spr][id_team1], $mecze[$spr][id_team2]);
  39.  
  40. $jest = '';
  41. foreach ($kolejka[$k] as $array1){
  42.  
  43. foreach ($a as $a1){
  44.  
  45. if (in_array($a1, $array1)) {
  46.  
  47.          
  48.            $jest = &#092;"Jest\";
  49.    
  50.  }
  51.  
  52.  else {
  53.    
  54.    if ($jest!= &#092;"Jest\")
  55.        $jest = &#092;"Brak\";
  56.        
  57.  }
  58.  
  59.    
  60.    }
  61.  
  62. }
  63.  
  64. if ($jest != &#092;"Jest\"){
  65.  
  66. $kolejka[$k][] = array($mecze[$spr][id_team1], $mecze[$spr][id_team2]);
  67. $del[] = array ($spr - $o++, );
  68.  
  69.  
  70. }
  71.  
  72. else {
  73.    
  74.        
  75.  }
  76.  
  77.    
  78.  
  79. echo $spr . &#092;" - \" . $jest . \" \";
  80. $spr++;
  81. }
  82.  
  83. echo &#092;"DELTE\";
  84. echo &#092;"\";
  85. print_r( $del );
  86. echo &#092;"\";
  87.  
  88. for($i = 0; $i <= count($del) - 1; $i++) {         // usuwa rekordy z tabeli mecze ktore sa juz dodane do
  89.       array_splice($mecze, $del[$i][0], 1);           // tabeli kolejka
  90. }  
  91.    array_splice ($del, 0, 5);                        // czysci tabele del
  92.  
  93.  
  94.  
  95.  
  96.  
  97. }
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. echo &#092;"MECZE\";
  105. echo &#092;"\";
  106. print_r( $mecze );
  107. echo &#092;"\";
  108.  
  109. echo &#092;"\";
  110.  
  111. echo &#092;"KOLEJKA\";
  112. echo &#092;"\";
  113. print_r( $kolejka );
  114. echo &#092;"\";
  115. ?>


No i nawet postepy sa ale ten skrypt tworzy 11 kolejek z tym ze pare kolejek jest po 5 spotkan a nie jak powino byc po 6. Jednak mysle ze problem jest w zapisie spotkan tzn
nie moze byc chyba tak :
1 2

1 3

1 4

1 5

1 6

1 7

1 8

1 9

1 10

1 11

1 12

2 3

2 4

2 5

2 6

2 7

2 8

2 9

2 10

2 11

2 12

itd....
MMX3
po pierwsze po co pytać bazę kilka razy skoro można użyć Join np:
  1. SELECT d1.nazwa, d2.nazwa FROM spotkania AS s
  2. INNER JOIN druzyny AS d1 ON d1.id_team = s.id_team1
  3. INNER JOIN druzyny AS d2 ON d2.id_team = s.id_team2


i teraz możesz sobie je wylistować np:
  1. <?php
  2. $connection = mysql_connect('host', 'login', 'pass');
  3. $result = mysql_query($sql);
  4. while($row=mysql_fetch_object($result)) {
  5. print_r($row)
  6. }
  7. ?>
ayeo
Może trochę OFFTOPIC, ale 12 drużyn, każdy z każdym.... jak Ci wychodzi 66?
siatkarzyna
Cytat(MMX3 @ 28.09.2008, 22:53:54 ) *
po pierwsze po co pytać bazę kilka razy skoro można użyć Join np:
  1. SELECT d1.nazwa, d2.nazwa FROM spotkania AS s
  2. INNER JOIN druzyny AS d1 ON d1.id_team = s.id_team1
  3. INNER JOIN druzyny AS d2 ON d2.id_team = s.id_team2


Tzn to jest odpawiedz na moj inny postu ktory pisalem o wyswietlanie nazw bo jesli chodzi o automatyczny terminarz z ktorym caly czas walcze to nic nie zmienia ale dzieki przyda sie. Dziala sprawdzalem

Cytat(ayeo @ 28.09.2008, 23:22:37 ) *
Może trochę OFFTOPIC, ale 12 drużyn, każdy z każdym.... jak Ci wychodzi 66?


No a ile ma wyjsc ? http://pl.wikipedia.org/wiki/Kombinacja_be...%C3%B3rze%C5%84 Liczba kombinacji 2-elementowych zbioru 12-elementowego A={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} czyli liczac 132/2 = 66

albo http://schedules.footballguys.com/freesche...chedule=12team9 wyzej podalem tez ten link ale nie dziala ten dziala o takie cos mi chodzi.
ayeo
Ja to policzyłem domowym sposobem:

a = x * (x - 1)/2

tylko nie wiem czemu x^2 wyszło mi 148 winksmiley.jpg Zwracam honor.

Pozdrawiam

PS ten nowy link też nie działa!
siatkarzyna
Może teraz >> LINK << nie umiem rozpracować jak się układa terminarze sportowe nawet jak ręcznie chce ułożyć tak na kartce to mi nie wychodzi zawsze pod koniec zostają takie spotkania że się powtarzają tu musi być jakiś system sciana.gif

Znalazłem opis systemu rozgrywkowego każdy z każdym >> Systemy rozgrywek << - PDF może teraz ktoś pomoże jak to zapisac w kodzie pierwsza rundę zrobiłem ale dalej nie wiem jak przesunąć wartość w tablicy o jeden. Próbowałem z next ale chyba nie umiem tego użyć.

Napisałem kod który generuje kolejki zgodnie z systemem rozgrywek każdy z każdym tak jak jest to podane w linku wyżej lecz ten skrypt jest mało elastyczny ponieważ działa dla 12 drużyn jak to napisać dla n drużyn ?

  1. <?php
  2. $zapytanie = 'SELECT id, nazwa FROM team ';
  3. $wynik = mysql_query($zapytanie) or die (mysql_error());
  4.  
  5. for ($i = 0; $i < $rekord = mysql_fetch_assoc($wynik); $i++) {
  6.  
  7.  
  8. $team[] = $rekord[id];
  9.  
  10. }
  11.  
  12.  
  13. $nr = 1;
  14.  
  15. $pozycja1 = $team[0];
  16. $pozycja2 = $team[1];
  17. $pozycja3 = $team[2];
  18. $pozycja4 = $team[3];
  19. $pozycja5 = $team[4];
  20. $pozycja6 = $team[5];
  21. $pozycja7 = $team[6];
  22. $pozycja8 = $team[7];
  23. $pozycja9 = $team[8];
  24. $pozycja10 = $team[9];
  25. $pozycja11 = $team[10];
  26. $pozycja12 = $team[11];
  27.  
  28.  
  29. for ( $k = 0; $k < 6 ; $k++ ) {         // kolejki nie przyste 1, 3, 5 ....
  30.  
  31.  
  32. $rundy[$nr][] = array($pozycja1++, $pozycja12, );
  33. $rundy[$nr][] = array($pozycja2++, $pozycja11, );
  34. $rundy[$nr][] = array($pozycja3++, $pozycja10, );
  35. $rundy[$nr][] = array($pozycja4++, $pozycja9, );
  36. $rundy[$nr][] = array($pozycja5++, $pozycja8, );
  37. $rundy[$nr][] = array($pozycja6++, $pozycja7, );
  38. $nr = $nr + 2;
  39.  
  40.  
  41.  if($pozycja11 >= 11){
  42.  
  43.   $pozycja11 = $pozycja11 - 10;
  44.  
  45. } else {
  46.  
  47. $pozycja11++;
  48. }
  49.  
  50.  
  51. if($pozycja10 >= 11){
  52.  
  53.   $pozycja10 = $pozycja10 - 10;
  54.  
  55. } else {
  56.  
  57. $pozycja10++;
  58. }
  59.  
  60.  
  61.  if($pozycja9 >= 11){
  62.  
  63.   $pozycja9 = $pozycja9 - 10;
  64.  
  65. } else {
  66.  
  67. $pozycja9++;
  68. }
  69.  
  70.  
  71.   if($pozycja8 >= 11){
  72.  
  73.   $pozycja8 = $pozycja8 - 10;
  74.  
  75. } else {
  76.  
  77. $pozycja8++;
  78. }
  79.  
  80.  
  81.   if($pozycja7 >= 11){
  82.  
  83.   $pozycja7 = $pozycja7 - 10;
  84.  
  85. } else {
  86.  
  87. $pozycja7++;
  88. }
  89.  
  90.  
  91. }
  92.  
  93. $ilosc = count( $runda[0] );
  94.  
  95.  
  96. $nrk = 1;
  97.  
  98. for ( $n=0; $n<6; $n++) {
  99.  
  100. for ( $i=0; $i<6; $i++) {
  101.  
  102. $team1 = $rundy[$nrk][$i][0];
  103. $team2 = $rundy[$nrk][$i][1];
  104. $nrkolejki = $nrk;
  105.  
  106.  
  107. // echo "Nr kolejki  -  " . $nrkolejki . " || " . $team1 . " - " . $team2 . "<br></br>";
  108.  
  109.   $query = "INSERT INTO spotkania (`id_team1`, `id_team2`, `nr_kolejki`) VALUES ('$team1', '$team2', '$nrkolejki')";
  110.            $result = mysql_query($query) or die (mysql_error());  
  111.  
  112.                }
  113.                        
  114. $nrk = $nrk + 2;
  115.                        
  116.    }
  117.  
  118.  
  119. $nrp = 10;
  120. $pozycja1 = $team[0];
  121. $pozycja2 = $team[1];
  122. $pozycja3 = $team[2];
  123. $pozycja4 = $team[3];
  124. $pozycja5 = $team[4];
  125. $pozycja6 = $team[5];
  126. $pozycja7 = $team[6];
  127. $pozycja8 = $team[7];
  128. $pozycja9 = $team[8];
  129. $pozycja10 = $team[9];
  130. $pozycja11 = $team[10];
  131. $pozycja12 = $team[11];
  132.  
  133. for ( $k = 0; $k < 5 ; $k++ ) {         // kolejki przyste 2, 4, 6 ....
  134.  
  135. $rundyp[$nrp][] = array($pozycja12, $pozycja11--);
  136. $rundyp[$nrp][] = array($pozycja1, $pozycja10--);
  137. $rundyp[$nrp][] = array($pozycja2, $pozycja9--);
  138. $rundyp[$nrp][] = array($pozycja3, $pozycja8--);
  139. $rundyp[$nrp][] = array($pozycja4, $pozycja7--);
  140. $rundyp[$nrp][] = array($pozycja5, $pozycja6--);
  141. $nrp = $nrp - 2;
  142.  
  143.  
  144.  if($pozycja1 <= 1){
  145.  
  146.   $pozycja1 = $pozycja1 + 10;
  147.  
  148. } else {
  149.  
  150. $pozycja1--;
  151. }
  152.  
  153.  
  154. if($pozycja2 <= 1){
  155.  
  156.   $pozycja2 = $pozycja2 + 10;
  157.  
  158. } else {
  159.  
  160. $pozycja2--;
  161. }
  162.  
  163.  
  164.  if($pozycja3 <= 1){
  165.  
  166.   $pozycja3 = $pozycja3 + 10;
  167.  
  168. } else {
  169.  
  170. $pozycja3--;
  171. }
  172.  
  173.  
  174.   if($pozycja4 <= 1){
  175.  
  176.   $pozycja4 = $pozycja4 + 10;
  177.  
  178. } else {
  179.  
  180. $pozycja4--;
  181. }
  182.  
  183.  
  184.   if($pozycja5 <= 1){
  185.  
  186.   $pozycja5 = $pozycja7 + 10;
  187.  
  188. } else {
  189.  
  190. $pozycja5--;
  191. }
  192.  
  193.  
  194. }
  195.  
  196. $nrk = 10;
  197.  
  198. for ( $n=0; $n<5; $n++) {
  199.  
  200. for ( $i=0; $i<6; $i++) {
  201.  
  202. $team1 = $rundyp[$nrk][$i][0];
  203. $team2 = $rundyp[$nrk][$i][1];
  204. $nrkolejki = $nrk;
  205.  
  206.  
  207. // echo "Nr kolejki  -  " . $nrkolejki . " || " . $team1 . " - " . $team2 . "<br></br>";
  208.  
  209.     $query = "INSERT INTO spotkania (`id_team1`, `id_team2`, `nr_kolejki`) VALUES ('$team1', '$team2', '$nrkolejki')";
  210.            $result = mysql_query($query) or die (mysql_error());    
  211.  
  212.                }
  213.                        
  214. $nrk = $nrk - 2;
  215.                        
  216.    }
  217. ?>
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.