2011-03-16 74 views
1

操作-兩個數組值?操作 - 兩個數組值?

我有02列:

$before = 
array("a"=>400, 
    "b"=>500, 
    "c"=>600 
); 

    $after = 
    array("a"=>100, 
     "b"=>100, 
     "c"=>100 
); 

我想要得到的結果是這樣的:

$now = 
    array(
     "a"=>300,//400-100 
     "b"=>400,//500-100 
     "c"=>500 //600-100 
); 

編輯:

的$後有些元素可能會缺失

例如:

$after = 
     array("a"=>100, 
      "c"=>100 
    ); 

回答

3
$now = array(); 

foreach ($before as $k => $v) { 
    $a = empty($after[$k]) ? 0 : $after[$k]; 
    $now[$k] = $v - $a; 
} 
+0

我你的編輯之後更新我的答案。 – hsz 2011-03-16 17:13:52

1
foreach ($before as $key=>$value) { 
    $now[$key] = $value-$after[$key] 
} 

這是有效的,如果你有確切的兩個數組相同的元素。

1
function subtract_arrays($a, $b){ 
    if(count($a) != count($b)){ 
     return false; 
    } 
    $c = array(); 
    foreach($a as $k=>$v){ 
     $c[$k] = $a[$k]-$b[$k]; 
    } 
    return $c; 
} 

$now = subtract_arrays($before, $after); 
+0

Aww,你打敗了我。這在Python中會容易得多... – Blender 2011-03-16 16:49:30

2

你可以使用array_map

$before = array(
    "a"=>400, 
    "b"=>500, 
    "c"=>600 
); 

$after = array(
    "a"=>100, 
    "b"=>100, 
    "c"=>100 
); 
function dif($a, $b) { 
    return $a - $b; 
} 
$res = array_map("dif", $before, $after); 
print_r($res); 

輸出:

Array 
(
    [0] => 300 
    [1] => 400 
    [2] => 500 
) 
+0

+1 for functional – erisco 2011-03-16 16:58:40

+0

if $ afer no element「c」your code it okay? – kn3l 2011-03-16 17:04:50

+0

@IEnAk:是的,您將在res數組的第三個元素中獲得600。 – Toto 2011-03-16 17:07:49