2011-10-01 160 views
3

我有两个关联数组。我需要减去($价格 - $含税),以获得$总价:php减去关联数组

$price['lunch'] = array("food" => 10, "beer"=> 6, "wine" => 9); 
$price['dinner'] = array("food" => 15, "beer"=> 10, "wine" => 10); 

$tax['lunch'] = array("food" => 2, "beer"=> 3, "wine" => 2); 
$tax['dinner'] = array("food" => 4, "beer"=> 6, "wine" => 4); 

期望的结果数组:

$result['lunch'] = (['food'] => 8, ['beer'] =>3, ['wine'] => 7) 
$result['dinner'] = (['food'] => 11, ['beer'] =>4, ['wine'] => 6 ) 

我想下面的功能和array_map无济于事:

function minus($a, $b) { 
    return $a - $b; 
} 

     foreach ($price as $value) 
     { 
      $big = $value; 
      foreach($tax as $v) { 
       $small = $v; 
     $e[] = array_map("minus",$big, $small); 
     }  
     } 

上面我得到了四个数组(第一个也是最后一个是正确的),所以它是不正确的。感谢您的任何信息!

回答

4

您可以使用键而不是数组映射进行比较。有了双重的foreach,你可以做任何数量的膳食和食物类型:

foreach(array_keys($price) as $meal) 
{ 
    foreach(array_keys($price[$meal]) as $type) 
    { 
     $e[$meal][$type] = $price[$meal][$type] - $tax[$meal][$type]; 
    } 
} 

注意,这个代码不看出来无论是在进餐或食物种类物品丢失......

+0

哈哈,你比我快:D我投你一票。 – ariefbayu

+0

第二个foreach中的$用餐是一个字符串不是数组 - 我得到错误 - 仍然我不知道这应该如何工作。 – phpJs

+0

对不起,我的错误 –

1

如果$price$tax结构始终平等相待,你可以使用下面的代码:

<?php 

$price['lunch'] = array("food" => 10, "beer"=> 6, "wine" => 9); 
$price['dinner'] = array("food" => 15, "beer"=> 10, "wine" => 10); 

$tax['lunch'] = array("food" => 2, "beer"=> 3, "wine" => 2); 
$tax['dinner'] = array("food" => 4, "beer"=> 6, "wine" => 4); 

$result = array(); 
foreach($price as $what => $value) 
{ 
    foreach($value as $food => $foodPrice) 
    { 
     $result[$what][$food] = $foodPrice - $tax[$what][$food]; 
    } 
} 

结果:

print_r($result); 

Array 
(
    [lunch] => Array 
     (
      [food] => 8 
      [beer] => 3 
      [wine] => 7 
     ) 

    [dinner] => Array 
     (
      [food] => 11 
      [beer] => 4 
      [wine] => 6 
     ) 

)