`+` Ya da `array_merge`: Ne yinelenen değerleri yazılı bitmedi olduğu gibi iki ilişkilendirilebilir dizi eklemek için en iyi yolu olurdu?

5 Cevap php

Bu soru burada zaten bir cevabı var:

5 Cevap

Bir dizi aynı anahtarla birden fazla anahtar-değer çifti olamaz. Eğer var ise:

$array1 = array(
  'foo' => 5,
  'bar' => 10,
  'baz' => 6
);

$array2 = array(
  'x' => 100,
  'y' => 200,
  'baz' => 30
);

Eğer bu dizileri birleştirmek, yalnızca kombine dizinin değerlerden birini tutmak için olsun. Tarif yöntemleri iki farklı şeyler:

print_r(($array1 + $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => 6
//     [x] => 100
//     [y] => 200
// )

print_r(array_merge($array1, $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => 30
//     [x] => 100
//     [y] => 200
// )

Yani gerçekten dizileri birleştirmek zaman want gerçekleşmesi ne olduğunu tanımlamak gerekir.

UPDATE

@ Davidosomething cevabı dayanarak, burada yaparsan böyle olur array_merge_recursive():

print_r(array_merge_recursive($array1, $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => Array
//         (
//             [0] => 6
//             [1] => 30
//         )
// 
//     [x] => 100
//     [y] => 200
// )

You actually want array_merge_recursive This creates an array of arrays if the KEY is the same but the value is different

Yinelenen bir anahtar bulunursa array_merge ve sendika hem de DEĞERLERE birini ATIN olacak

Her iki değer tutmak istiyorsanız, bunlardan en az birinin anahtarını değiştirmek zorunda. Belki de tüm tuşları önek iki diziyi birleştirmek için kendi yöntemi yazabilirsiniz.

array_merge hiçbir değerleri kaybolur şekilde dizileri birleştirerek, diziler bitişik sayısal tuşları var sağladı. Eğer dize anahtarlarını karıştırma başlatırsanız, aynı tuşları ile değerler üzerine yazılır. Eğer diziler değil, haritalar gibi dizileri tedavi, array_merge ne istediğinizi yapacak.

Bir resim daha iyi 1000 kelime

$a = array('foo' => 'A');
$b = array('foo' => 'B');

print_r($a + $b);              // foo=A
print_r(array_merge($a, $b));  // foo=B