繁体   English   中英

两个数组值之间的差异量

[英]Difference quantity between two arrays values

我有两个数组,其中包含产品代码作为键,数量包含值('code'=> quantity)。 我想生成一个数组,其中包含旧数组(array1)和新数组(array2)之间的数量差异,包括从array1到array2添加或删除的任何代码。

$array1 = ['code1' => 1, 'code2' => 2];    
$array2 = ['code1' => 0, 'code2' => 2, 'code3' => 3];

// Array expected
$diffQty = [
    'code1' => -1, // 1 quantity deleted in array 2
    'code2' => 0, // quantity no changed between array1 and array2
    'code3' => 3  // new code added in array2 with 3 quantity
];

我试过这样的东西,但我没有在数组之间添加或删除代码:

$diffQty = [];
foreach ($array2 as $code => $qty) {
    if (array_key_exists($code, $array1)) {
        $diffQty = $array1[$code] - $array2[$code];
        $diffQty[$code] = $diffQty;
    }
}

您当前的问题是,在两个阵列中都不存在密钥的情况下,您不会执行任何操作。

获取存在的所有唯一键,并将其放入单独的数组中。 循环生成的数组,该数组现在包含$array1$array2数组中存在的所有键。 $array2减去$array1的值,如果两个数组中都没有有效的键,则将其默认为零。

$array1 = ['code1' => 1, 'code2' => 2];    
$array2 = ['code1' => 0, 'code2' => 2, 'code3' => 3];
$all_keys = array_unique(array_merge(array_keys($array1), array_keys($array2)));
$output = array();

foreach ($all_keys as $code) {
    $output[$code] = (!empty($array2[$code]) ? $array2[$code] : 0) - (!empty($array1[$code]) ? $array1[$code] : 0);
}

$output结果

Array (
    [code1] => -1
    [code2] => 0
    [code3] => 3
)

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM