PHP - 二维数组中的和

时间:2017-10-25 07:47:49

标签: php arrays

我有一个二维数组,如:

fruits [
    [apple, 10],
    [orange, 30],
    [banana, 7]
]

在循环中,我想根据水果类型更新数量。 例如:如果我还有4个香蕉和20个草莓新阵列就像:

fruits [
    [apple, 10],
    [orange, 30],
    [banana, 11],
    [strawberry, 20]
]

我怎么能这样做? 提前致谢

1 个答案:

答案 0 :(得分:2)

试试这个:(它适用于您的阵列,但下面有更好的解决方案)     

$old = [
    ["apple", 10],
    ["orange", 30],
    ["banana", 7]
];

$new = [
    ["banana", 4],
    ["strawberry", 20],
];

function sumArrays($old, $new)
{
    foreach($new as $n) {
        $fruit = $n[0];
        $found = false;
        foreach($old as &$o) {
            if($o[0] == $fruit) {
                $o[1] += $n[1];
                $found = true;
                break;
            }
        }
        if(!$found) {
            $o[] = $n;
        }
    }
    return $old;
}

var_dump(sumArrays($old, $new));

但效果不佳。如果水果名称是数组的关键,那会好得多:

$arr = [
    "apple" => 10,
    "orange" => 30,
    "banana" => 7
];

这样sum函数可以是

function sumArrays($old, $new)
{
    foreach($new as $fruit => $value) {
        if(empty($old[$fruit])) {
            $old[$fruit] = $value;
        } else {
            $old[$fruit] += $value;
        }
    }
    return $old;
}

这是一个更干净的代码,它更有效