如何合并数组和保存键?

Jas*_*per 56 php arrays

我有两个数组:

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
Run Code Online (Sandbox Code Playgroud)

我想合并它们并保持按键和顺序而不是重新索引!!

怎么这样?

Array
(
    [a] => new value
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [123] => 456
)
Run Code Online (Sandbox Code Playgroud)

我尝试使用array_merge()但它不会保留密钥:

print_r(array_merge($array1, $array2));

Array
(
    [a] => 'new value'
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [0] => 456
)
Run Code Online (Sandbox Code Playgroud)

我尝试使用union运算符,但它不会覆盖该元素:

print_r($array1 + $array2);

Array
(
    [a] => 1   <-- not overwriting
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [123] => 456
)
Run Code Online (Sandbox Code Playgroud)

我尝试交换位置,但顺序错了,不是我的需要:

print_r($array2 + $array1);

Array
(
    [d] => 4
    [e] => 5
    [f] => 6
    [a] => new value 
    [123] => 456
    [b] => 2
    [c] => 3
)
Run Code Online (Sandbox Code Playgroud)

我不想使用循环,有没有办法获得高性能?

Ja͢*_*͢ck 139

您正在寻找array_replace():

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
print_r(array_replace($array1, $array2));
Run Code Online (Sandbox Code Playgroud)

从PHP 5.3开始提供.

更新

您还可以使用union 数组运算符 ; 它适用于旧版本,实际上也可能更快:

print_r($array2 + $array1);
Run Code Online (Sandbox Code Playgroud)


小智 6

假设我们有 3 个数组,如下所示。

$a = array(0=>['label'=>'Monday','is_open'=>1],1=>['label'=>'Tuesday','is_open'=>0]);

$b = array(0=>['open_time'=>'10:00'],1=>['open_time'=>'12:00']); 

$c = array(0=>['close_time'=>'18:00'],1=>['close_time'=>'22:00']); 
Run Code Online (Sandbox Code Playgroud)

现在,如果您想合并所有这些数组,并想要一个最终数组,其中所有数组的数据都位于键 0 in 0 和 1 in 1 键下,依此类推。

然后你需要使用array_replace_recursive PHP 函数,如下所示。

$final_arr = array_replace_recursive($a, $b , $c); 
Run Code Online (Sandbox Code Playgroud)

结果如下。

Array
(
    [0] => Array
        (
            [label] => Monday
            [is_open] => 1
            [open_time] => 10:00
            [close_time] => 18:00
        )

    [1] => Array
        (
            [label] => Tuesday
            [is_open] => 0
            [open_time] => 12:00
            [close_time] => 22:00
        )

)
Run Code Online (Sandbox Code Playgroud)

希望上述解决方案最适合您的要求!