Łączenie tablic w PHP

03 listopada 2007

Bywa tak, że trzeba połączyć dwie (lub więcej) tablice w PHP. Jak tego dokonać? Są dwa sposoby. Różnice między nimi są malutkie aczkolwiek bardzo istotne i trzeba o nich pamiętać.

Pierwsza metoda to użycie zwykłego znaku dodawania. Tak! W PHP można po prostu sumować ze sobą tablice. Wygląda to tak:

PHP:
  1. $newArray = $array1 + $array2;

Drugi sposób to funkcja array_merge(). Użycie:

PHP:
  1. $newArray = array_merge($array1, $array2);

Obie metody łączą ze sobą dwie lub więcej tablic. Ale co się dzieje gdy w łączonych tablicach są takie same klucze?

Klucze tekstowe
Metoda pierwsza (dodawanie): jeżeli klucze tekstowe się powtarzają to w wynikowej tablicy zostaje klucz z tablicy "na lewo" czyli z tej w której pierwszy raz dany klucz wystąpił. Kolejne powtórzenia klucza nie są po prostu brane pod uwagę.
Metoda druga (array_merge()): odwrotnie do metody pierwszej. Kolejne wystąpienia tego samego klucza nadpisują ciągle wynik w taki sposób, że w ostatecznej tablicy znajduje się ta wartość klucza, która wystąpiła w ostatniej tablicy "na prawo" z tym kluczem.

Klucze liczbowe
Metoda pierwsza (dodawanie): klucze liczbowe nie są nadpisywane wraz z dodawaniem nowej tablicy. Elementy w tablicy z lewej strony zostają na zawsze i nie są nadpisywane nawet jeżeli dany klucz pojawi się ponownie w którejś tablicy z prawej strony.
Metoda druga (array_merge()): to nie jest już sumowanie tablic a raczej łączenie, albo jeszcze lepiej, dołączanie. Jeżeli klucze liczbowe się powtórzą to klucze w tablicy z lewej strony zostaną zachowane a klucze w tablicy z prawej strony zostaną podniesione tak aby znaleźć się na końcu tablicy lewej.

Oto przykład, który wszystko wyjaśni:

PHP:
  1. $array1 = array(
  2. 0              => 'banan',
  3. 1              => 'kiwi',
  4. 'warzywo'      => 'burak',
  5. 'inne_warzywo' => 'cebula'
  6. );
  7.  
  8. $array2 = array(
  9. 0         => 'jabłko',
  10. 'warzywo' => 'seler',
  11. 'zwierze' => 'kot'
  12. );
  13.  
  14. print_r($array1 + $array2);
  15.  
  16. print_r(array_merge($array1, $array2));

Wyniki:

CODE:
  1. Array
  2. (
  3.     [0] => banan
  4.     [1] => kiwi
  5.     [warzywo] => burak
  6.     [inne_warzywo] => cebula
  7.     [zwierze] => kot
  8. )
  9. Array
  10. (
  11.     [0] => banan
  12.     [1] => kiwi
  13.     [warzywo] => seler
  14.     [inne_warzywo] => cebula
  15.     [2] => jabłko
  16.     [zwierze] => kot
  17. )

Ten wpis nie ma komentarzy... ale możesz być pierwszy

Odpowiedz



Podobne wpisy: