MC, 11:36 czwartek, 10.05.2012 r.
Ilustracja do artykułu: PHP - Różne podejścia do łączenia tablic

PHP - Różne podejścia do łączenia tablic

Jakiś czas temu przyszło mi połączyć dwie tablice w PHP. Prosta sprawa, jednak to dopiero błędne podejście do tej operacji uświadomiło mi, że połączyć tablice można na kilka sposobów i każdy z nich da nieco inny rezultat. Stąd ta notatka.

Co mamy do wyboru?

Chciałbym tutaj pokazać trzy różne sposoby na połączenie tablic w PHP i pokazać różnice między nimi. Będą to funkcje array_merge(), array_push() oraz operator dodawania +. W takiej też kolejności chciałbym je omówić, ponieważ wydaje mi się, że tak wygląda hierarchia ich najczęstszego używania.

Nim jednak przejdziemy do sedna sprawy, zróbmy wstępne założenia do przykładów, na których będziemy się opierać. Dajmy na to, że mamy dwie tablice z imionami kobiet i mężczyzn:

$kobiety = array("Agnieszka", "Marta", "Weronika");
$mezczyzni = array("Jan", "Łukasz", "Tomasz", "Mateusz", "Dawid");

Metoda array_merge()

Jeżeli zależy nam na połączeniu tablic, w sensie dopisania elementów z jednej na końcu tej drugiej, to merge_array() jest odpowiednią funkcją. Wykonajmy poniższy kod:
$merge = array_merge($kobiety, $mezczyzni);
print_r($merge);
Oto rezultat łączenia tablic za pomocą metody array_merge():
Array
(
    [0] => Agnieszka
    [1] => Marta
    [2] => Weronika
    [3] => Jan
    [4] => Łukasz
    [5] => Tomasz
    [6] => Mateusz
    [7] => Dawid
)
Widzimy, że rezultat jest zgodny z założeniem. Sądzę, że w większości przypadków, to ta metoda jest najodpowiedniejsza do naszych potrzeb.

Metoda array_push()

O ile funkcja array_merge() dodała wszystkie elementy z jednej tablicy na koniec drugiej, o tyle funkcja array_push() ma za zadanie dopisać do tablicy, przyjmowanej jako pierwszy argument funkcji, wartości podane w kolejnych argumentach. Na pierwszy rzut oka, można by pomyśleć, że gdy zechcemy do tablicy $kobiety dopisać tablicę $mezczyzni, otrzymamy to samo co w poprzednim przykładzie. Tak się jednak nie stanie. Tablica $mezczyzni zostaną potraktowane jako jeden obiekt, który zostanie przypisany jednemu elementowi tablicy $kobiety. Spójrzmy na poniższy kod i jego rezultat:
array_push($kobiety, $mezczyzni);
print_r($kobiety);
Wynik:
Array
(
    [0] => Agnieszka
    [1] => Marta
    [2] => Weronika
    [3] => Array
        (
            [0] => Jan
            [1] => Łukasz
            [2] => Tomasz
            [3] => Mateusz
            [4] => Dawid
        )

)

Jak widać, cała tablica $mezczyzni została przypisana jednemu elementowi tablicy $kobiety. Dla porównania, wykonajmy jeszcze poniższe polecenie:

array_push($kobiety, "Jan", "Łukasz", "Tomasz", "Mateusz", "Dawid");
print_r($kobiety);
Co w rezultacie da nam efekt jak z array_merge():
Array
(
    [0] => Agnieszka
    [1] => Marta
    [2] => Weronika
    [3] => Jan
    [4] => Łukasz
    [5] => Tomasz
    [6] => Mateusz
    [7] => Dawid
)

Operator dodawania +

Operacja dodania do siebie dwóch tablic da jeszcze inny efekt, niż te, które mogliśmy zobaczyć w powyższych przykładach. Tym razem będziemy mieli do czynienia niejako z operacją dopełnienia jednej tablicy do drugiej. Tablica $kobiety zawiera 3 elementy, podczas gdy $mezczyzni ma ich 5. Zatem wykonanie operacji:
$dodanie = $kobiety + $mezczyzni;
print_r($dodanie);
"dopełni" tablicę $kobiety, końcowymi elementami z tablicy $mezczyzni tak by miały tę samą liczbę elementów.
Array
(
    [0] => Agnieszka
    [1] => Marta
    [2] => Weronika
    [3] => Mateusz
    [4] => Dawid
)

Czy coś jeszcze?

To wszystkie podejścia jakie chciałem tutaj przedstawić. Dobrze jest mieć świadomość efektów jakie możemy osiągnąć przy pomocy odpowiednich funkcji, tak by dobrać tę właściwą.

Komentarze (1)

Imię:
Treść:
ZbigniewRuchalski 2018-03-07 14:15:43
zajebiste brachu