2011-03-16 72 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