Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tablica wielowymiarowa, sprawdzenie czy istnieje element w tablicy
damianooo
post 2.07.2013, 18:40:26
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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ę ?

Ten post edytował damianooo 2.07.2013, 20:47:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Damonsson
post 3.07.2013, 07:46:04
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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

Ten post edytował Damonsson 3.07.2013, 07:46:24
Go to the top of the page
+Quote Post
rtech.projekty.p...
post 3.07.2013, 08:27:56
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 24.06.2013

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


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().
Go to the top of the page
+Quote Post
damianooo
post 3.07.2013, 17:27:37
Post #4





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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.
Go to the top of the page
+Quote Post
Damonsson
post 4.07.2013, 07:45:24
Post #5





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


google -> php round robin

Ten post edytował Damonsson 4.07.2013, 07:45:43
Go to the top of the page
+Quote Post
damianooo
post 4.07.2013, 20:33:25
Post #6





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:15