猿问

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

我有两个数组:


数组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

请问我缺少什么?


非常感谢您的帮助。



慕村9548890
浏览 202回答 2
2回答

幕布斯6054654

您可以将费率数组与购物车数组中的信息嵌套在一起,然后将其求和。$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

繁花不似锦

要指出你原来逻辑中的缺陷,你不会去到数组颜色的层面$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'];        }    }}
随时随地看视频慕课网APP
我要回答