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
MMX3
post
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 9
Dołączył: 26.01.2004
Skąd: Poznań

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


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. ?>
Go to the top of the page
+Quote Post
siatkarzyna
post
Post #3





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

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


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.
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: 6.10.2025 - 06:28