用另一个覆盖数组值

时间:2011-07-21 20:33:45

标签: php arrays

我想学习如何组合两个具有相同键但不同值的关联数组,就像我们在jQuery中使用var options = $.extend(defaults, options);

一样
$first = array("name"=>"John","last_name"=>"McDonald","City"=>"World"); //default values
$second = array("name"=>"Michael","last_name"=>"Jackson"); //user provided

$result = combine($first,$second);

//output array("name"=>"Michael","last_name"=>"Jackson","City"=>"World");

我正在寻找一些built-in而不是编写一个全新的功能来提供此功能。当然,如果你有一些整洁的东西,请告诉我。

...谢谢

7 个答案:

答案 0 :(得分:24)

$result = array_merge($first, $second);

只要你处理字符串键,array_merge完全符合你的要求。两个数组组合在一起,两个数组具有相同的键,$second的值会覆盖$first的值。

答案 1 :(得分:4)

答案 2 :(得分:2)

我认为array_merge()array_combine()是您要搜索的功能。

答案 3 :(得分:0)

你可以迭代第二个数组并在第一个数组中设置每个元素

答案 4 :(得分:0)

我认为array_merge()array_combine()是您正在寻找的功能 array_merge()可用于合并进一步调用的两个数组。 和array_combine()数组的键,其中包含另一个数组的值。

答案 5 :(得分:0)

如果您确切知道要覆盖的键,则可以像这样简单地进行操作 $ first ['name'] =“ jastin”; 否则,您必须使用array_merge

答案 6 :(得分:0)

我从来没有为这种(简单的)需求找到内置函数,所以我开发了一个自定义函数,以便用$ override数组覆盖$ default数组:

function array_override( $default, $override )
{
    foreach( $default as $k=>$v )
    {
        if( isset( $override[$k] ) ) $default[$k] = $override[$k];
    }
    return $default;
}

如您所见,仅当在$ override数组上进行设置时,才会覆盖$ default中的值;否则,$ default值将保留在返回的数组中。