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

时间:2020-06-26 02:14:54

标签: php arrays

我有两个数组:

数组A:

$rates = array(
    'apple' = array(
        'red'    => 1.19,
        'green'  => 0.99,
        'yellow' => 0.89
    )
);

阵列B:

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

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

所以:

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

总数应为2.18


这是我尝试过的:

foreach($cart as $key => $arr){
    if(!in_array($key[$arr], $rates)){
        $total += $rates[$key];
    }
}

但这不起作用。

请问我缺少什么?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您有几个问题。首先,您应该检查$cart中的产品类型是否作为$rates中的键,即

if(!in_array($key[$arr], $rates)){

应为:

if (isset($rates[$key])) {

第二,一旦确定密钥确实存在于$rates中,则需要遍历$arr中的每个值以从$rates获取价格(使用null合并运算符,以避免值不在rates数组中的问题)

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

输出:

2.18

Demo on 3v4l.org

答案 1 :(得分:0)

<?php
$rates = array(
    'apple' => array(
        'red'    => 1.19,
        'green'  => 0.99,
        'yellow' => 0.89
    )
);
$cart = array(
    'apple' => array(
        '0'  => 'red',
        '1'  => 'green'
    )
);

$total = 0;
foreach($cart as $type => $items) {
    if(array_key_exists($type, $rates)) {
        foreach($items as $item) {
            if(array_key_exists($item, $rates[$type])) {
                $total += $rates[$type][$item];
            }
        }
    }
}

echo $total;
?>
相关问题