Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tablica wielowymiarowa
Forum PHP.pl > Forum > PHP
damianooo
Witam,

Mam taką strukturę tablicy wielowymiarowej:

  1. $myArray = array(1 => array('first' => array(2, 5, 4),
  2. 'second' => array(1, 2, 3)),
  3. 2 => array('first' => array(7, 4, 3),
  4. 'second' => array(9, 5, 2)),
  5. 3 => array('first' => array(2, 5, 9),
  6. 'second' => array(8, 3, 1)),
  7. );


Jak widać każdy z indeksów 1,2,3 posiada dokładnie takie same tablice z dwoma elementami "first" i "second" . Moje pytanie jest takie: Jak sprawdzić czy istnieje dany element w każdej tablicy "first" , ale Uwaga! na tej samej pozycji ? Czy wogóle jest to możliwe ? Może mam źle zaprojektowaną tablicę ?
Damonsson
Jeśli wiesz na jakiej pozycji, to np dla pierwszej pozycji sprawdzisz czy zawsze występuje "2" tak:

  1. $szukana = '2';
  2. foreach ($myArray as $array) {
  3. if ($array['first'][0] != $szukana) {
  4. die('różne');
  5. }
  6. }


Nie wiem, czy nie da się łatwiej, jakąś bezpośrednią funkcją na tablicy podziałać.
rtech.projekty.php
Nie można stwierdzić czy tablica jest źle zaprojektowana, gdy się nie zna założeń, co ona ma zawierać.
Od strony PHP masz prawidłowo zbudowaną tablicę, bo nie otrzymujesz błędu.
Od strony logistycznej - sam musisz wywnioskować.
Kolega Damonsson podał ci bardzo dobre rozwiązanie.
Jeśli jednak interesuje cię, jak podobne problemy rozwiązywać przy pomocy gotowych funkcji, to polecam
zapoznanie się z:
array_walk_recursive() lub array_filter().
damianooo
nie do końca o to mi chodziło ...

To ma działać tak:
Mam 4 graczy i każdy z każdym ma rozegrać po jednym meczu w jednej kolejce. Końcowy wynik ma być taki:

  1. $terminarz = array(1 => array(1 => array(1,2), 2 => array(3,4)),
  2. 2 => array(1 => array(1,3), 2 => array(2,4)),
  3. 3 => array(1 => array(1,4), 2 => array(2,3))
  4. );


Zrobiłem tak:

  1. $terminarz = array();
  2. for ($kolejka = 1; $kolejka <= 3; $kolejka++) {
  3. for ($gospodarz = 1; $gospodarz <= 4; $gospodarz++) {
  4. for ($gosc = 1; $gosc <= 4; $gosc++) {
  5. if ($gospodarz != $gosc) {
  6. if((!in_array($gospodarz, $terminarz[$kolejka][1])) &&
  7. (!in_array($gosc, $terminarz[$kolejka][1])) &&
  8. (!in_array($gospodarz, $terminarz[$kolejka][2])) &&
  9. (!in_array($gosc, $terminarz[$kolejka][2]))){
  10. $terminarz[$kolejka][1][] = $gospodarz;
  11. $terminarz[$kolejka][2][] = $gosc;
  12. }
  13. }
  14. }
  15. }
  16. }
  17. print_r($terminarz);


ale wyniki sie powtarzają. Nie wiem jaki zastosować tutaj algorytm.
Damonsson
google -> php round robin
damianooo
Wielkie dzięki Stary , o to mi właśnie chodziło ... nie wiedziałem, że tak to się nazywa i że jest tak powszechnie stosowane ... nie umiałem sobie z tym poradzić

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