2012-04-27 71 views
1

我有两个多维数组存储x和y坐标我试图合并成一个单一的数组,同时保留x值,但加在一起的y值。合并2多维数组和总和值

阵列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 
    ) 

任何帮助,将不胜感激。

+0

是两个数组的长度相同? – MrCode 2012-04-27 16:17:06

+0

阵列1中的所有X元素是否可用于阵列2? – j4kes 2012-04-27 17:30:10

+0

是的,他们是相同的长度和X元素应始终相同,但不能保证。 – StephenD 2012-04-30 09:14:36

回答

0
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; 
} 
+0

请仅使用此代码答案提供一些解释。请始终以教育意图回答。 – mickmackusa 2018-02-16 07:49:23

0

你的每个原始数组都是一个向量;让我们让他们包含(任何尺寸)点的任意量:

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; 
} 
+0

我实际上选择了另一个答案,因为它在求和y值时保留了x值。然而你的例子在解释它的时候更清楚。谢谢。 – StephenD 2012-05-01 10:34:37