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

+0

Будут ли доступны все элементы X в массиве 1 в массиве 2? – j4kes

+0

Да, они имеют одинаковую длину, и элементы X всегда должны быть одинаковыми, но они не гарантируются. – StephenD

ответ

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

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

EDIT:

Я просто понял, что вы пишете 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

Я фактически выбрал другой ответ, поскольку он сохранил значение x, суммируя значение y. Однако ваш пример был намного яснее в объяснении этого. Спасибо. – StephenD

Смежные вопросы