2012-04-27 76 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