array_merge($a, $b) $a elemanlarını ve ardından $b elemanlarını içeren yeni bir dizi döndürür. Sayısal anahtarlar 0'dan yeniden numaralanır; iki dizide aynı dizge anahtar varsa sonraki dizideki değer kazanır. İstediğiniz kadar dizi verebilirsiniz.
array_merge() argümanlarını değiştirmez. Birleştirilmiş diziyi döndürür, bu yüzden sonucu atayın: $all = array_merge($all, $more);.
Sayısal anahtarlar yeniden numaralanır
array_merge() tam sayı anahtarları isim olarak değil konum olarak görür. Tam sayı anahtarlı her eleman sona eklenir ve diziler aynı sayıları ya da boşlukları kullanmış olsa bile 0'dan yeni bir anahtar alır. Listeler için istediğiniz budur; sayılar ID olduğunda ise bir sürprizdir.
Tam sayıya benzeyen dizge anahtarlar ('101') tam sayı olarak saklanır, bu yüzden onlar da yeniden numaralanır. 'id101' gibi anahtarlar olduğu gibi kalır.
array_merge ile + operatörü karşılaştırması
+ operatörü (dizi birleşimi) de dizileri birleştirir, ama ters kuralla: soldaki dizide zaten var olan her anahtar için soldaki değer kazanır ve sağdaki atılır. Asla yeniden numaralamaz. Bu da + operatörünü varsayılanları doldurmanın, array_merge() fonksiyonunu ise onları geçersiz kılmanın doğal yolu yapar.
array_merge($a, $b) | $a + $b | |
|---|---|---|
| Aynı dizge anahtar | $b dizisindeki değer | $a dizisindeki değer |
| Tam sayı anahtarlar | yeniden numaralanır, tüm değerler kalır | korunur, çakışmalarda $b kaybeder |
| Tipik kullanım | listeleri birleştirme, ayarları geçersiz kılma | varsayılanları doldurma, ID'leri koruma |
Bloktaki son örnek klasik + tuzağıdır: ['a', 'b'] + ['x', 'y', 'z'] a, b, z verir, çünkü 0 ve 1 anahtarları solda zaten vardır.
Açma söz dizimi: [...b]
Açma (spread) operatörü dizileri bir dizi değişmezinin içinde açar. array_merge() gibi davranır: tam sayı anahtarlar yeniden numaralanır ve PHP 8.1'den beri dizge anahtarlara izin verilir, sonraki kazanır. Dizileri tekil değerlerle karıştırdığınızda iyi okunur.
Bir diziyi var olan bir diziye yerinde eklemek için açma operatörüyle array_push() sayfasına bakın.
Dizilerden oluşan bir diziyi birleştirme
Birleştirilecek diziler bir listenin içindeyse o listeyi array_merge() içine açın. Bu aynı zamanda bir döngü içinde birleştirmenin hızlı yoludur: parçaları toplayın, sonra bir kez birleştirin.
Döngü içinde $all = array_merge($all, $batch); yazmak çalışır, ama her turda büyüyen dizinin tamamını kopyalar ve binlerce elemanla yavaşlar.
array_merge_recursive ve array_replace
array_merge_recursive() iç içe dizileri de birleştirir, ama düz değerler tutan tekrarlanan bir dizge anahtarda üzerine yazmaz: iki değeri yeni bir dizide toplar. Yapılandırma için istenen bu nadiren olur. Orada genellikle doğru araç array_replace_recursive() fonksiyonudur: her seviyede değerlerin üzerine yazar ve anahtarları korur.
Üç JSON satırını yukarıdan aşağıya okuyun: array_merge() tüm db dizisini değiştirdi ve host kayboldu, array_merge_recursive() port ve debug değerlerini iki elemanlı listelere çevirdi, array_replace_recursive() ise kastettiğiniz yapılandırmayı üretti.
Sık yapılan hata: birleştirme hiçbir şeyi silmez
array_merge() farklı anahtarlar altında duran tekrarlanan değerleri korur. İki etiket listesini birleştirmek her ortak etiketi iki kez verir. Sonucu array_unique() ve ardından yeniden numaralamak için array_values() içinden geçirin.
array_unique sayfası satırlardan ve iç içe dizilerden tekrarları kaldırmayı anlatır.
Sıkça Sorulan Sorular
PHP'de array_merge ile + arasındaki fark nedir?
Tekrarlanan dizge anahtarlarda array_merge($a, $b) $b dizisindeki değeri tutar, $a + $b ise $a dizisindeki değeri tutar. Sayısal anahtarlarda array_merge() her şeyi sona ekler ve yeniden numaralar; + ise sayısal anahtarları korur ve anahtarı $a içinde zaten olan $b elemanlarını atar.
Dizileri sayısal anahtarları koruyarak nasıl birleştiririm?
Soldaki dizi kazanacaksa $a + $b, sağdaki dizi kazanacaksa array_replace($a, $b) kullanın. array_merge() sayısal anahtarları her zaman 0'dan yeniden numaralar.
PHP'de dizilerden oluşan bir diziyi nasıl birleştiririm?
Dış diziyi array_merge() içine açın: $all = array_merge(...$lists);. Boş bir liste için [] döndürür. Dizileri önce bir döngüde toplayın ve sonda bir kez birleştirin; döngü içinde array_merge() çağırmak büyüyen sonucu her seferinde kopyalar.
PHP'de açma operatörünü dizge anahtarlarla kullanabilir miyim?
Evet, PHP 8.1'den beri. [...$a, ...$b] o zaman array_merge($a, $b) gibi davranır: sayısal anahtarlar yeniden numaralanır ve sonraki bir dizge anahtar öncekinin üzerine yazar.