상당히 간단한 질문입니다. 차이점은 무엇입니까?
$merged = array_merge($array1, $array2);
과
$merged = $array1 + $array2;
?
상당히 간단한 질문입니다. 차이점은 무엇입니까?
$merged = array_merge($array1, $array2);
과
$merged = $array1 + $array2;
?
답변:
차이점은 다음과 같습니다.
+
반면, 오퍼레이터는, 2 개 개의 배열의 조합을 필요 array_merge
기능은 연합을 얻어 BUT 중복 키를 덮어 쓰게된다.
array_merge
사실은 ... (3)을 수행하고 볼 BoltClock의 대답 :하지 여기에 언급 된 다른 중요한 차이점에 대해 array_merge
재설정 숫자 키, 달리를 +
.
다음은 간단한 설명 테스트입니다.
$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를 사용할 수도 있습니다. 단지 나중 값이 이전 값을 덮어 쓰는 것입니다.
출처 : 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
)
또 다른 차이점에주의하십시오. 공용체 (+)는 비어 있지 않은 값을 빈 값 (동일한 키 고려)으로 덮어 쓰지 않지만 array_merge는 다음과 같이합니다.
$a = array('foo' => 'bar');
$b = array('foo' => ''); // or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
출력 :
Array
(
[foo] => bar
)
Array
(
[foo] => 0
)
따라서 분명히 순서를 변경하면 결합과 병합이 동일한 작업을 수행합니다.
$a = array('foo' => 'bar', 'x' => 'fromA');
$b = array('foo' => null, 'x' => 'fromB');
echo '$a+$b: ';
var_dump($a+$b);
echo '$b+$a: ';
var_dump($b+$a);
echo 'array_merge($a, $b): ';
var_dump(array_merge($a, $b));
echo 'array_merge($b, $a): ';
var_dump(array_merge($b, $a));
출력 :
$a+$b: array(2) {
["foo"]=>
string(3) "bar"
["x"]=>
string(5) "fromA"
}
$b+$a: array(2) {
["foo"]=>
NULL
["x"]=>
string(5) "fromB"
}
array_merge($a, $b): array(2) {
["foo"]=>
NULL
["x"]=>
string(5) "fromB"
}
array_merge($b, $a): array(2) {
["foo"]=>
string(3) "bar"
["x"]=>
string(5) "fromA"
}
배열의 순서를 기억하십시오.
$a+$b
대 $b+$a
. 재정의 된 것은 없습니다.