2016-03-11 32 views
1

我有兩個數組看起來像這樣的:求和陣列,並返回一個新的數組

$r1[$db_rate_type] = Array($db_rate_in, $db_rate_out, $db_rate_desc); 
$r2[$db_rate_type] = Array($db_rate_in, $db_rate_out, $db_rate_desc); 

可以說,每一個陣列的價值看起來是這樣的:

Array 1: 
[1] = [1400] [20] ["Standard timelønn"] 
[2] = [NULL] [20] ["Kveldstillegg"] 

Array 2: 
[1] = [NULL] [20] ["Standard timelønn"] 
[2] = [1500] [20] ["Kveldstillegg"] 

我怎麼能總結數組的值,但在開始時保持計數ID?

我曾嘗試下面的代碼:

$c = array_map(function() { 
    return array_sum(func_get_args()); 
}, $a, $b); 

但只計算一個陣列添加到另一個陣列,而不是陣列內的陣列。我更喜歡返回以下內容:

Array returned: 
[1] = [1400] [40] ["Standard timelønn"] 
[2] = [1500] [40] ["Kveldstillegg"] 

那麼,我該如何做到這一點,但儘可能有效?獲取數據庫的

的完整代碼等,可以發現here

+0

你用什麼版本的PHP?根據它可能有不同的解決方案。 – ksimka

+0

將來,請不要編輯您的問題,使其無效現有的答案。用戶花時間寫出無效答案是不公平的。下一次,請問一個新問題。 – Matt

回答

1

例如用(需要參數拆包)5.6

<?php 

$r1 = [ 
    1 => [1, 2, "one"], 
    2 => [5, 5, "two"], 
]; 
$r2 = [ 
    1 => [null, 20, "one"], 
    2 => [1, 0, "two"], 
]; 

$sum = function (array $a1, array $a2) { 
    return array_map(
     function($e1) { 
      return (is_int($e1) || is_null($e1)) ? array_sum(func_get_args()) : $e1; 
     }, 
     $a1, 
     $a2 
    ); 
}; 


$res = []; 
foreach ($r1 as $k => $a) { 
    $res[$k] = $sum($r1[$k], $r2[$k]); 
} 

var_dump($res); 

// Output: 
array(2) { 
    [1] => 
    array(3) { 
    [0] => 
    int(1) 
    [1] => 
    int(22) 
    [2] => 
    string(3) "one" 
    } 
    [2] => 
    array(3) { 
    [0] => 
    int(6) 
    [1] => 
    int(5) 
    [2] => 
    string(3) "two" 
    } 
} 

https://3v4l.org/i10rJ

+0

Se更新的問題,也是我想要的數組密鑰是一樣的,從1開始,然後繼續到2等 – PhyCoMath

+0

這返回了一個錯誤'['對我來說... – PhyCoMath

+0

再次:什麼是你的PHP版本? – ksimka

0

我希望這幫助。

<?php 
//your needs 
/* 
$d = array(
    0 => array(1400, 40, 1500, 30), 
    1 => array(1500, 40, null, 30) 
); 
*/ 

//a 
$a = array(
    0 => array(1400,20,null,15), 
    1 => array(null, 20, null, 15) 
); 

//b 
$b = array(
    0 => array(null,20,1500,15), 
    1 => array(1500, 20, null, 15) 
); 

//c 
$c = array_map(function() { 
    $args = func_get_args(); 
    $sumArray = array(); 
    foreach ($args as $k=>$subArray) { 
     foreach ($subArray as $id=>$value) { 
      @$sumArray[$id]+=$value; 
     } 
    } 
    return $sumArray; 
}, $a, $b); 

//result 
print_r($c); 
?> 

Result

相關問題