program tip

두 배열 결합

radiobox 2020. 10. 18. 09:14
반응형

두 배열 결합


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

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);


이것은 작동합니다 :

$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 Default is SORT_REGULAR.

5.2.8- Default is SORT_STRING

It perfectly works. Hope it helps same.


If you are using PHP 7.4 or above, you can use the spread operator ... as the following examples from the PHP Docs:

$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]

It works like in JavaScript ES6.

See more on https://wiki.php.net/rfc/spread_operator_for_array.


https://www.php.net/manual/en/function.array-merge.php

<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>

참고URL : https://stackoverflow.com/questions/6535444/combine-two-arrays

반응형