php 合并两个数组

eoxn13cs  于 2022-12-02  发布在  PHP
关注(0)|答案(9)|浏览(152)

我有两个这样的数组:

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

有什么办法吗?

pokxtpni

pokxtpni1#

这是可行的:

$output = $array1 + $array2;
gmol1639

gmol16392#

使用php7.4执行此操作的新方法是Spread操作符**[...]**

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);

Spread运算符的性能应优于array_merge
Spread操作符的一个显著优点是它支持任何可遍历对象,而array_merge函数仅支持数组。

pw9qyyiw

pw9qyyiw3#

若要执行此操作,您可以循环通过一个并追加到另一个:

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

vnjpjtjt

vnjpjtjt4#

如果您使用的是PHP 7.4或更高版本,则可以使用spread运算符...,如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

fruv7luv

fruv7luv5#

这是可行的:

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

ht4b089n6#

警告!$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-* 默认值为排序字符串

它是perfectly works。希望它也有帮助。

qoefvg9y

qoefvg9y7#

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

w8rqjzmb8#

只需用途:

$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

pprl5pva

pprl5pva9#

你应该考虑到$array1 + $array2 != $array2 + $array1

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

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

使用**$array1**+ $array2

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

并使用 $array2 +$array1

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

相关问题