[php] 두 배열 결합

다음과 같은 두 개의 배열이 있습니다.

array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

array(
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

이 두 배열을 결합하여 중복을 포함하지 않고 원래 키를 유지하고 싶습니다. 예를 들어 출력은 다음과 같아야합니다.

array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

나는 이것을 시도했지만 원래 키를 변경하고 있습니다.

$output = array_unique( array_merge( $array1 , $array2 ) );

어떤 해결책이 있습니까?



답변

다음을 사용하십시오.

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

그것은 그것을 해결해야합니다. 하나의 키가 두 번 이상 발생하면 ( '44'예제에서 와 같이) 문자열 키를 사용하기 때문에 하나의 키는 동일한 이름을 가진 후속 키를 덮어 씁니다. 귀하의 경우 둘 다 동일한 값을 갖기 때문에 어쨌든 중요하지 않으며 중복도 제거됩니다.

업데이트 : 방금 깨달았습니다. PHP는 숫자 문자열 키를 숫자 (정수)로 취급하므로 이와 같이 동작 할 것입니다.

해결 방법은 키를 다시 만드는 것입니다.

$output = array_combine($output, $output);

업데이트 2 : 연산자도 있다는 사실을 항상 잊어 버립니다 ( 진짜로 찾고있는 것이기 때문 입니다! : D).

$output = $array1 + $array2;

이 모든 것은 http://php.net/manual/en/function.array-merge.php 에서 볼 수 있습니다.


답변

다음 사항을 고려해야합니다. $array1 + $array2 != $array2 + $array1

$array1 = array(
'11' => 'x1',
'22' => 'x1'
);

$array2 = array(
'22' => 'x2',
'33' => 'x2'
);

$ 배열 1 + $ 배열 2

$array1 + $array2 = array(
'11' => 'x1',
'22' => 'x1',
'33' => 'x2'
);

과와 $ array2는 + $ 배열 1

$array2 + $array1 = array(
'11' => 'x1',
'22' => 'x2',
'33' => 'x2'
);


답변

이것은 작동합니다 :

$output = $array1 + $array2;


답변

이렇게하려면 하나를 반복하고 다른 하나에 추가 할 수 있습니다.

<?php

$test1 = array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

$test2 = array(
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);


function combineWithKeys($array1, $array2)
{
    foreach($array1 as $key=>$value) $array2[$key] = $value;
    asort($array2);
    return $array2;
}

print_r(combineWithKeys($test1, $test2));

?>

업데이트 : KingCrunch는 최상의 솔루션을 제시했습니다 .print_r($array1+$array2);


답변

PHP 7.4 이상을 사용하는 ...경우 PHP 문서의 다음 예제와 같이 스프레드 연산자 를 사용할 수 있습니다 .

$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]

function getArr() {
  return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; //['a', 'b', 'c']

$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']

function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}
$arr8 = [...arrGen()]; //[11, 12, 13, 14]

JavaScript ES6 에서처럼 작동합니다.

https://wiki.php.net/rfc/spread_operator_for_array에서 자세한 내용을 참조하십시오 .


답변

이것은 작동합니다 :

$a = array(1 => 1, 2 => 2, 3 => 3);
$b = array(4 => 4, 5 => 5, 6 => 6);
$c = $a + $b;
print_r($c);


답변

경고! $ array1 + $ array2는 키를 덮어 쓰므로 내 솔루션 (다차원 배열의 경우)은 array_unique () 를 사용하는 것입니다.

array_unique(array_merge($a, $b), SORT_REGULAR);

주의:

5.2.10+ 기본값을 sort_flags다시 SORT_STRING 으로 변경했습니다 .

5.2.9 기본값은 SORT_REGULAR입니다.

5.2.8- 기본값은 SORT_STRING입니다.

그것은 완벽하게 작동합니다 . 도움이되기를 바랍니다.