【问题标题】:Merge 2 multi-dimension arrays and sum value [duplicate]合并2个多维数组和总和值[重复]
【发布时间】:2012-05-08 09:49:53
【问题描述】:

我有两个存储 x 和 y 坐标的多维数组,我试图将它们合并为一个数组,同时保留 x 值但将 y 值相加。

数组 1:

Array(
[0] => Array
    (
        [x] => 1327449600000
        [y] => 5
    )

[1] => Array
    (
        [x] => 1327450500000
        [y] => 1
    )

数组 2:

 Array(
[0] => Array
    (
        [x] => 1327449600000
        [y] => 1
    )

[1] => Array
    (
        [x] => 1327450500000
        [y] => 3
    )

所以综合结果是:

 Array(
[0] => Array
    (
        [x] => 1327449600000
        [y] => 6
    )

[1] => Array
    (
        [x] => 1327450500000
        [y] => 4
    )

任何帮助将不胜感激。

【问题讨论】:

  • 两个数组长度一样吗?
  • 数组 1 中的所有 X 元素都可以在数组 2 中使用吗?
  • 是的,它们的长度相同,X 元素应该始终相同,但不能保证。

标签: php arrays multidimensional-array merge sum


【解决方案1】:
function add_array($a1, $a2) {
    $c = count($a1);
    for ($i=0;$i<$c;$i++) {
        if (isset($a2[$i]) && isset($a2[$i]['y'])) {
            $a1[$i]['y'] += $a2[$i]['y'];
        }
    }
    return $a1;
}

【讨论】:

  • 请对此仅代码的答案提供一些解释。请始终带着教育的意图回答。
【解决方案2】:

每个原始数组都是一个向量;让我们允许它们包含任意数量的点(任何维度):

function addPoints( vectorA, vectorB )
{
  if( vectorA.length != vectorB.length ) return [];
  var vectorC = [];
  for( var i=0; i<vectorA.length; ++i )
  {
    var tmp = [];
    for( var j in vectorA[i] ) tmp.push( vectorA[i][j]+vectorB[i][j] );
    vectorC.push( tmp );
  }
  return vectorC;
}

编辑:

我刚刚意识到您正在编写 PHP。请给我一秒钟转换代码。

function addPoints( $veca, $vecb )
{
   if( count($veca)!=count($vecb) ) return array();

   $vecc = array();
   for( $i=0; $i<count($veca); ++$i )
   {
      $tmp = array();
      foreach( $veca[$i] as $key => $val ) $tmp[$key] = $val + $vecb[$i][$key];
      $vecc[] = $tmp;
   }
   return $vecc;
}

【讨论】:

  • 我实际上选择了另一个答案,因为它在对 y 值求和的同时保留了 x 值。但是,您的示例在解释时要清楚得多。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
相关资源
最近更新 更多