在php中获取具有相同键的两个或多个多维数组的元素之和

在php中获取具有相同键的两个或多个多维数组的元素之和,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我正在php.net中查看一些函数,如array\u merge和array\u combine,但我仍然不知道如何实现我对数组的假设。我的假设如下 $data1 = array( [0]=>array( [2]=>array( [subject1]=>30 [subject2]=>50 ) ) [1]=>a

我正在php.net中查看一些函数,如array\u merge和array\u combine,但我仍然不知道如何实现我对数组的假设。我的假设如下

$data1 = array(
       [0]=>array(
           [2]=>array(
                  [subject1]=>30
                  [subject2]=>50
             )
       )
      [1]=>array(
           [3]=>array(
                  [subject1]=>30
                  [subject2]=>50
             )
       )
    )
$data2 = array(
       [0]=>array(
           [2]=>array(
                  [subject1]=>20
                  [subject2]=>70
             )
       )
      [1]=>array(
           [3]=>array(
                  [subject1]=>30
                  [subject2]=>40
             )
       )
    )
如何获得上述2个数组?可以将多个数组合并为一个数组,如以下结构:

$datamerge = array(
           [0]=>array(
               [2]=>array(
                      [subject1]=>50
                      [subject2]=>120
                 )
           )
          [1]=>array(
               [3]=>array(
                      [subject1]=>60
                      [subject2]=>90
                 )
           )
        )

请帮帮我。这是我的项目,对我来说非常重要。

如果您完全确定两个数组具有完全相同的嵌套结构,因此两个数组中都存在每个级别的键,那么您可以编写以下代码:

function array_sum_recursive ($data1, $data2) {
    if (!is_array($data1)) {
        return $data1 + $data2;
    }
    foreach ($data1 as $key => $value) {
        $result[$key] = array_sum_recursive($data1[$key], $data2[$key]); 
    }
    return $result;
}

$result = array_sum_recursive($data1, $data2);
var_export($result);
您提供的数据输出为:

array (
  0 => 
  array (
    2 => 
    array (
      'subject1' => 50,
      'subject2' => 120,
    ),
  ),
  1 => 
  array (
    3 => 
    array (
      'subject1' => 60,
      'subject2' => 90,
    ),
  ),
)
但是,让函数处理可能没有那么好对应的输入数组会更安全。由于必须进行的所有测试,它使功能更长:

function array_sum_recursive($data1, $data2) {
    if (!is_array($data1) && !is_array($data2)) {
        return $data1 + $data2;
    }
    // deepest array gets precedence
    if (!is_array($data2)) {
        return $data1;
    }
    if (!is_array($data1)) {
        return $data2;
    }
    $keys = array_unique(array_merge(array_keys($data1), array_keys($data2)));
    foreach ($keys as $key) {
        if (isset($data1[$key]) && isset($data2[$key])) {
            $result[$key] = array_sum_recursive($data1[$key], $data2[$key]); 
        } else if (isset($data1[$key])) {
            $result[$key] = $data1[$key];
        } else {
            $result[$key] = $data2[$key];
        }
    }
    return $result;
}
两个以上的阵列 如果需要像这样添加两个以上的数组,可以将下一个数组累加到上一个和的结果中,如下所示:

$result = array_sum_recursive($data1, $data2);
$result = array_sum_recursive($result, $data3);
$result = array_sum_recursive($result, $data4);
// etc.
您甚至可以为此编写一个函数,该函数接受数量可变的参数,请参见:

然后你可以写:

$result = array_sum_recursive_all($data1, $data2, $data3, $data4);

@walther,正如我前面提到的。我尝试了数组合并,但它只是在第二个数组的末尾追加数组。这就是你自己的计划的结束?手动遍历数组并将值存储在临时变量中怎么样?@walther,谢谢你的建议。因为我一点也不知道,我只是个新手。请你帮我解决这个问题。你知道递归或foreach循环是什么意思吗?是的,我有一些类似打印$datamerge数组的方法。谢谢你的回答。这种方法对更多的数组有效吗?你能解释一下吗?你是说你想使用N个数组,然后将它们相加?是的,这就是我需要的。谢谢。在我的回答中增加了一部分。
$result = array_sum_recursive_all($data1, $data2, $data3, $data4);