PHP减去关联数组

4
我有两个关联数组。我需要执行减法运算 ($price - $tax) 得出 $total 价格:
 $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);
        }       
        }

通过以上方法我得到了四个数组(但是第一个和最后一个是正确的),因此不正确。谢谢任何信息!

2个回答

5
您可以考虑使用键而不是数组映射。通过双重foreach循环,您可以处理任何数量的餐点和食品类型:
foreach(array_keys($price) as $meal)
{
    foreach(array_keys($price[$meal]) as $type)
    {
        $e[$meal][$type] = $price[$meal][$type] - $tax[$meal][$type];
    }
}

请注意,此代码不会检查餐品或食物类型中是否缺少任何项目...

$meal在第二个foreach中是一个字符串而不是数组 - 我得到了错误 - 但我仍然不确定这应该如何工作。 - phpJs

3

如果$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
        )

)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接