Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Porownywanie wartosci z tablicy, Przesuwanie wartości w tablicy
siatkarzyna
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 4
Dołączył: 1.07.2008

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


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....

Ten post edytował siatkarzyna 30.09.2008, 01:03:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
siatkarzyna
post
Post #2





Grupa: Zarejestrowani
Postów: 85
Pomógł: 4
Dołączył: 1.07.2008

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
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: 10.10.2025 - 06:25