比较PHP中的两个多维数组以求和

时间:2020-06-26 17:06:30

标签: php arrays

我有两个数组:

数组A:

$rates = array(
    'apple' => array(
        'red' => array(
            'rate' => 1.19,
            'resume' => 'This is a red apple.'
        ),
        'green' => array(
            'rate' => 0.99,
            'resume' => 'This is a green apple.'
        ),
        'yellow' => array(
            'rate' => 0.89,
            'resume' => 'This is a yellow apple.'
        ),
    )
);

阵列B:

$cart = array(
    'apple' => array(
        '0'  => red,
        '1'  => green
    )
);

数组B是购物车之一,我需要从数组A获取费率。

所以:

  • 苹果>红色> 1.19
  • 苹果>绿色> 0.99

总数应为2.18


这是我尝试过的:

$total = 0;
foreach ($cart as $key => $arr) {
    if (isset($rates[$key])) {
        foreach ($arr as $value) {
            $total += $rates[$key]['rate'][$value] ?? 0;
        }
    }
}
echo $total;

但是它不起作用。 https://3v4l.org/vsEvA

请问我缺少什么?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以将rates数组与购物车数组中的信息嵌套在一起,然后求和。

$sum =0;
foreach($cart as $prod => $sub){
    foreach($sub as $color){
        $sum += $rates[$prod][$color]['rate'];
    }
}

echo $sum;

https://3v4l.org/C6U3f

编辑:我相信您在代码中只会错误地评估价值和价值。
https://3v4l.org/pj3WL

答案 1 :(得分:0)

要指出原始逻辑中的缺陷,您并不会达到$rates数组颜色的水平。

这是缺少部分的逻辑。

foreach ($cart as $key => $arr) {
    if (isset($rates[$key])) {
        foreach ($arr as $value) {
           foreach($rates[$key] as $colorKey => $color)
              if ($colorKey === $value)
                $total += $color['rate'];
        }
    }
}
相关问题