Jak z tablicy usunąć lub wyodrębnić zduplikowane wartości w PHP?
Tworząc skomplikowane zapytania do bazy danych lub operując na zbiorach różnorodnych informacji, często zachodzi potrzeba wyodrębnienia lub usunięcia z nich powtarzających się wartości. W jaki sposób można tego dokonać, pokażemy w tej poradzie.
Usunięcie zduplikowanych danych z zachowaniem indeksów
Od czwartej wersji PHP rezultat ten jest prosty do uzyskania, dzięki zastosowaniu funkcji array_unique.
array array_unique(array $tablica [, int $flaga_sortowania = SORT_STRING ]);
Wystarczy podać w pierwszym parametrze tablicę, na której chcemy operować.
$array = array('webhosting.pl',
'blog' => 'm1chu.eu',
'portal' => 'webhosting.pl',
'windowshosting.pl'
);$result = array_unique($array);
var_dump($result);
W wyniku otrzymamy tablicę wejściową, ale bez wiersza zaindeksowanego jako portal. Zachowywana jest więc zawsze pierwsza występująca wartość, a wszelkie kolejne, takie same, są usuwane. Pozostałe indeksy nie zmieniają się.
array(3) {
[0]=>
string(13) "webhosting.pl"
["blog"]=>
string(8) "m1chu.eu"
[1]=>
string(17) "windowshosting.pl"
}
Problem pojawia się jednak, gdy chcielibyśmy przeprowadzić powyższą operację na tablicy dwuwymiarowej.
$array = array(
array(
'webhosting.pl',
'm1chu.eu'
),
array(
'webhosting.pl',
'm1chu.eu'
),
array(
'portal' => 'webhosting.pl'
),
array(
'portal' => 'webhosting.pl',
'windowshosting.pl'
)
);$result = array_unique($array);
var_dump($result);
Od wersji 5.2.9 funkcja ta pozwala na sprawdzanie tablic wielowymiarowych, ale robi to w nieco inny sposób, niż ten, który zaprezentowaliśmy powyżej. Sprawdza ona elementy kolejnych wymiarów macierzy pod względem tego, czy nie pokrywają się one wszystkie z wartościami innego klucza pierwszego wymiaru.
Co za tym idzie, ponieważ w $array[0][0,...,n] znajdują się dokładne te same wartości co w $array[1][0,...,n], to ta druga część tablicy zostanie uznana za duplikat. Patrząc jednak na $array[2][0,...,n] i $array[3][0,...,n] tak się już nie stanie, gdyż jedna część drugiego wymiaru składa się z jednego indeksu, a druga z dwóch, o odmiennych wartościach.
array(3) {
[0]=>
array(2) {
[0]=>
string(13) "webhosting.pl"
[1]=>
string(8) "m1chu.eu"
}
[2]=>
array(1) {
["portal"]=>
string(13) "webhosting.pl"
}
[3]=>
array(2) {
["portal"]=>
string(13) "webhosting.pl"
[0]=>
string(17) "windowshosting.pl"
}
}
Usunięcie zduplikowanych wartości z przeindeksowaniem
Aby wykonać przeindeksowanie, wystarczy tablicę wyjściową przepuścić przez funkcję array_values.
array array_values(array $tablica);
Zwraca ona wartości funkcji, którą zadamy w parametrze z inkrementowanymi od zera kluczami.
var_dump(array_values($result));
Domyślnie, w każdym wypadku, działa ona na pierwszej płaszczyźnie, bez względu na to ilu wymiarowa jest tablica. Jeżeli chcemy przesortować kolejne, możemy skorzystać z jakiejkolwiek pętli języka PHP.
array(3) {
[0]=>
string(13) "webhosting.pl"
[1]=>
string(8) "m1chu.eu"
[2]=>
string(17) "windowshosting.pl"
}
Wyodrębnienie tylko powtarzających się danych
Aby otrzymać wynik odwrotny od powyższych, można skorzystać z array_diff_key.
array array_diff_key(array $tablica_1, array $tablica_2 [, array $tablica_n ]);
Funkcja ta porównuje ze sobą tablice, zwracając różnice pomiędzy nimi.
$array = array(
'webhosting.pl',
'blog' => 'm1chu.eu',
'portal' => 'webhosting.pl',
'windowshosting.pl'
);$result = array_diff_key($array, array_unique($array));
var_dump($result);
Wprowadzając więc w jednym parametrze tablice ze wszystkimi elementami, a w drugim bez zduplikowanych wartości, otrzymamy w rezultacie zamierzony cel.
array(1) {
["portal"]=>
string(13) "webhosting.pl"
}
W przypadku macierzy wielowymiarowych i metody opartej na pierwszym paragrafie obowiązuje nadal zasada w nim wymieniona.
Uwagi końcowe
- Jeżeli za duplikaty chcemy traktować także wartości objęte białymi znakami na początku lub końcu ciągu, to możemy użyć następującej funkcji przed array_unique:
$tablica_wyjsciowa = array_map('trim', $tablica_wejsciowa); - Funkcja array_unique zwraca wynik względem wielkości znaków. Tak więc słowo Webhosting nie będzie duplikatem webhosting.
Popularne
Nazwa padła ofiarą szantażystów, inni polscy hosterzy też zagrożeni?
19
Premiera Diablo 3 wzbudziła dyskusję na temat gier, które zawsze chcą być online
19
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Nowy problem z Windows 8: bootuje się za szybko
10
Amerykańscy rodzice straszeni „e-narkotykami” dostępnymi w Sieci
21
Z okazji wypuszczenia akcji Facebooka przypomnijmy sobie, kim jest Zuckerberg
10
Blueseed: libertariańska sztuczna wyspa przyciągnęła już ponad sto startupów z całego świata
8
Rewolucja w Firefoksie, nowa łatka czterokrotnie ograniczyła zużycie pamięci
20
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
CVDazzle: makijaż jest w stanie pokonać automatyczne systemy ulicznego monitoringu
3
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Co czeka programistów po czterdziestce?
27
Ubuntu 12.04 LTS już dostępny: stabilna dystrybucja na następne pięć lat?
28
Społeczność
stop_gupota "Fanatyczny" Diablo 3 jest dopiero od 10 dni.
Mas Ciekawa informacja, ale akurat projekt wytopu stali przez chłopów to był...
_Igancio Poziom artykułu jest bardzo niski ! Niczego się nie dowiedziałem , wygląda...
voluu A ja mam problem. MIanowicie, po dodaniu kodu z tego poradnika miniaturki...
Sebek Pozycjonowanie stron za pośrednictwem firm oferujących
swoje usługi nie...
asdosad jak to zrobić na xp??
lol Jak ktoś tu wcześniej zauważył - artykuł jest o niczym, a właściwie ukrytą...
- Najdmen.pl: Konta www z wyłączonym licznikiem transferu od IONIC.pl (1)
- 2BE.PL: [Oferta] Promocja jak złoto w 2BE.PL (1)
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |








