[php] array_merge와 array + array의 차이점은 무엇입니까?

상당히 간단한 질문입니다. 차이점은 무엇입니까?

$merged = array_merge($array1, $array2);

$merged = $array1 + $array2;

?



답변

차이점은 다음과 같습니다.

+반면, 오퍼레이터는, 2 개 개의 배열의 조합을 필요 array_merge기능은 연합을 얻어 BUT 중복 키를 덮어 쓰게된다.


답변

다음은 간단한 설명 테스트입니다.

$ar1 = [
   0  => '1-0',
  'a' => '1-a',
  'b' => '1-b'
];


$ar2 = [
   0  => '2-0',
   1  => '2-1',
  'b' => '2-b',
  'c' => '2-c'
];

print_r($ar1+$ar2);

print_r(array_merge($ar1,$ar2));

결과 :

Array
(
  [0] => 1-0
  [a] => 1-a
  [b] => 1-b
  [1] => 2-1
  [c] => 2-c
)
Array
(
  [0] => 1-0
  [a] => 1-a
  [b] => 2-b
  [1] => 2-0
  [2] => 2-1
  [c] => 2-c
)

숫자가 아닌 중복 키는 통합 연산자를 사용하여 첫 번째 값을 가져 오지만 이후 값은 array_merge를 사용하여 가져옵니다.

숫자 키의 경우 첫 번째 값은 통합 연산자와 함께 사용되는 반면 모든 값은 방금 다시 인덱싱 된 array_merge와 함께 사용됩니다.

나는 일반적으로 연관 배열에 유니온 연산자를 사용하고 숫자에 array_merge를 사용합니다. 물론 연상을 위해 array_merge를 사용할 수도 있습니다. 단지 나중 값이 이전 값을 덮어 쓰는 것입니다.


답변

array_merge()입력 배열에서 발견 된 모든 숫자 키가 결과 배열에서 다시 인덱싱되도록합니다. 공용체 연산자 +는 재 색인을 일으키지 않습니다.


답변

array_merge 대 플러스

출처 : https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/

array_merge ($ defaults, $ options) 사용 중지 :

function foo(array $options)
{
   $options += ['foo' => 'bar'];

   // ...
}

참고 : array_replace 함수는 PHP5.3부터 존재합니다.


답변

+ 부호 는 배열 키 의 첫 번째 항목 에서만 값을 가져옵니다 .
array_merge는 배열 키 의 마지막 발생 에서 값을 가져옵니다 .

예:

$first = ['a'=>'one',
        'b'=>'two',
        'c'=>'three'];

$second = ['a'=>'fourth',
        'b'=>'fifth',
        'c'=>'sixth',
        '3'=>'number three'];

$merged = $first + $second;
echo "<pre> plus sign merge\n";
var_dump($merged);

$merged = array_merge($first,$second);
echo "\n array_merge function merge\n";
var_dump($merged);

결과는 다음과 같습니다.

더하기 기호 merge
array (4) {
[ “a”] =>
string (3) “one”
[ “b”] =>
string (3) “two”
[ “c”] =>
string (5) “three”
[3] =>
string (12) “3 번”
}

array_merge function merge
array (4) {
[ “a”] =>
string (6) “fourth”
[ “b”] =>
string (5) “fifth”
[ “c”] =>
string (5) “sixth”
[0] =>
string (12) “3 번”
}

흥미로운 점 은 숫자 3이기 때문에 문자열이지만 숫자 3의 ‘3’인덱스를 array_merge실제로 지우는 것입니다.

따라서 array_merge숫자 인덱스가 있는 배열과 병합 할 때주의하십시오 . 열쇠를 잃어 버릴 수 있습니다. 중요한 경우 문자열을 앞에 둡니다.

그래서 '3' => 'three'같은 것을 사용하는 대신'_3' => 'three'


답변

array_merge중복 된 non_numeric 키 는 덮어 쓰지만 $array1 + $array2그렇지 않은 것 같습니다.


답변

또 다른 예 (명시적인 키가없는 배열, 연산자 +array_merge작동 방식에 관해서 는 분명하지만 “명백한”것들은 볼 때 더 간단합니다.))

$a = array('apple');
$b = array('orange', 'lemon');

echo '$a + $b = ';             print_r($a + $b);
echo 'array_merge($a, $b) = '; print_r(array_merge($a, $b));

줄게:

$a + $b = Array
(
    [0] => apple
    [1] => lemon
)
array_merge($a, $b) = Array
(
    [0] => apple
    [1] => orange
    [2] => lemon
)