合并两个数组而不替换值

时间:2011-11-29 13:08:31

标签: php arrays multidimensional-array

我有点迷失或心灵不能正常工作。我读了其他问题,但可以让我的工作。

我得到了这个数组:

Array
(
    [89] => Array
        (
            [0] => 16
            [1] => 2
        )

)

我得到了这个:

Array
(
    [84] => Array
        (
            [0] => 2
        )

    [83] => Array
        (
            [0] => 2
        )

    [87] => Array
        (
            [0] => 2
            [1] => 3
        )

    [88] => Array
        (
            [0] => 2
        )

    [89] => Array
        (
            [0] => 2
        )

    [90] => Array
        (
            [0] => 2
        )

)

我应该得到所有结果但是在关键字89上我应该得到第一个数组的值。

Array
(
    [84] => Array
        (
            [0] => 2
        )

    [83] => Array
        (
            [0] => 2
        )

    [87] => Array
        (
            [0] => 2
            [1] => 3
        )

    [88] => Array
        (
            [0] => 2
        )

    [89] => Array
        (
            [0] => 16
            [1] => 2
        )

    [90] => Array
        (
            [0] => 2
        )

)

数组合并不会工作:(。 在得到第一个数组的结果之后:

Array
(
    [89] => Array
        (
           [1] => 2
        )

)

结果数组应更新为一条记录。

我确定它为你的大师提供了1分钟的代码,但数组对我来说总是很痛苦。

由于

更新:如果我使用array_merge_recursive它不会保留我的密钥:

print_r(array_merge_recursive($array1,$array2));
Array
(
    [0] => Array
        (
            [0] => 16
            [1] => 2
        )

    [1] => Array
        (
            [0] => 2
        )

    [2] => Array
        (
            [0] => 2
        )

    [3] => Array
        (
            [0] => 2
            [1] => 3
        )

    [4] => Array
        (
            [0] => 2
        )

    [5] => Array
        (
            [0] => 2
        )

    [6] => Array
        (
            [0] => 2
        )

)

4 个答案:

答案 0 :(得分:3)

array_merge_recursive应该做的工作;查看文档以获取更多指示:http://www.php.net/manual/en/function.array-merge-recursive.php

修改 该函数的行为与我最初的想法不同,这是解决问题的函数的不同版本:

function array_merge_recursive_distinct(array &$array1, array &$array2) {
  $merged = $array1;

  foreach($array2 as $key => &$value) {
    if(is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
      $merged[$key] = array_merge_recursive_distinct($merged[$key], $value);
    } else {
      $merged[$key] = $value;
    }
  }

  return $merged;
}

感谢php.net社区http://www.php.net/manual/en/function.array-merge-recursive.php#92195

答案 1 :(得分:0)

$newarray=array();

foreach(array_merge($array1,$array2) as $k=>$arr){
    $newarray[$k]=array_merge($array1[$k],$array2[$k]);
}

答案 2 :(得分:0)

foreach($firstArr as $key=>$val){
    if(in_array($key,$secondArray)){
        $secondArray[$key] = $firstArr[$key];
    }
}

试试这可能会对你有所帮助。

答案 3 :(得分:0)

如果我理解正确,adding arrays就足够了:

add_test

array_merge相反,它不会覆盖第一个数组中的值,也不会重新编号数字键。