PHP вычитать ассоциативные массивы - PullRequest
3 голосов
/ 01 октября 2011

У меня есть два ассоциативных массива.Мне нужно вычесть ($ цена - $ налог), чтобы получить общую сумму $:

 $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 ]

4 голосов
/ 01 октября 2011

Вы можете сравнить, используя ключи вместо отображения массива. С двойным foreach вы можете делать любое количество блюд и типов пищи:

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

Обратите внимание, этот код не ищет пропущенных элементов ни в еде, ни в типах еды ...

1 голос
/ 01 октября 2011

если структуры $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
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...