[英]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.