Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Część wspólna wielowymiarowych tablic
Forum PHP.pl > Forum > PHP
jeliN
Mam tablice wielowymiarowe:
Array ( [0] => Array ( [0] => 24 [1] => 25 [2] => 26 [3] => 27 ) [1] => Array ( [0] => 19 [1] => 21 [2] => 22 [3] => 23 [4] => 24 [5] => 25 ) [2] => Array ( [0] => 24 [1] => 25 ) [3] => Array ( [0] => 22 [1] => 23 [2] => 24 [3] => 25 ) [4] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 ) )

I chodzi mi o to jak wyciągnąć z tego część wspólną, czyli elementy które pojawiają się w każdej tablicy.
W tym wypadku rozwiązaniem będzie 24 i 25.
Jest tylko 5 tablic z podtablicami, ale chciałbym żeby można było porównywać dowolną liczbę tablic.
Nie wiem czy można jakoś do tego wykorzystać funkcję array_uintersect i pętle lub jakieś inne działające rozwiązanie...
Bardzo proszę o pomoc.
Blame
Jeśli chodzi o podanie powtarzających się wartości to zaglądnij do array_unique i spójrz na pierwszy komentarz od góry.
jeliN
nie chodzi o wyciagniecie powtarzajacych sie elementow w jednej tablicy, bo takich nie ma
chodzi o to zeby wyciagnac powtarzajace sie w kazdej tablicy elementy
czyli np.:
tab1: 1, 2, 3, 4, 5
tab2: 2, 4, 5, 8
tab3: 1, 3, 4, 6

wynikiem jest: 4
bo występuje w kazdej tablicy

jak to rozwiazac?
jest to jeden z koncowych elementow mojej pracy dyplomowej i mam big problem ;/
thek
Pokombinuj z array_intersect. A jak? Pomyśl. Skoro masz znaleźć część wspólną w wielowymiarowej to masz prosty algorytm:
1. Weź dwie pierwsze tablice.
2. Znajdź ich część wspólną.
3. Jeśli brak takiej, zakończ algorytm z wynikiem -> brak.
4. Jeśli istnieje część wspólna, weź kolejną z tablicę.
5. Jeśli nie istnieje kolejna tablica, zakończ algorytm z dotychczasowo obliczona częścią wspólną i to jest wynik.
6. Jeśli kolejna tablica istnieje idź do kroku 2.

Chyba proste? To po prostu pętla while z zagnieżdżonym array_intersect i nic więcej.

EDIT: Na Twoim przykładzie zrobię:
tab1 intersect tab2 => 4, 5
istnieje tab3
tab3 intersect temp(4, 5) => 4
brak kolejnej tablicy, zwrócony wynik => 4

Jak zauważysz nie zawsze idziesz do ostatniej tablicy. Wystarczy, że w pewnym momencie część wspólna się "wyczyści", a algorytm zakonczy się z wynikiem pustym.
jeliN
Problem rozwiązany. Dzięki winksmiley.jpg
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.