gpt4 book ai didi

php - 如何合并两个数组并对重复键的值求和?

转载 作者:行者123 更新时间:2023-12-03 03:20:54 25 4
gpt4 key购买 nike

我想按条件合并数组。如果数组键匹配,则添加值,如果不匹配,则保留该值。

这是我的数组:

Array1
(
[1] => 199
[3] => 1306
[5] => 199
)

Array2
(
[3] => 199
[4] => 199
)

我想要的结果是:

Result
(
[1] => 199
[3] => 1505
[4] => 199
[5] => 199
)

我使用了 if-else 条件,但它重复了已经匹配的值。

这是我的编码尝试:

$all=array();   
foreach($sall as $sskey => $ssvalue){
foreach($upgradesall as $uukey => $uuvalue){
//$sskey==$uukey?$all[] = array("id"=>$sskey, "amount"=>$ssvalue+$uuvalue):($sskey!=$uukey? $all[] = array("id"=>$sskey, "amount"=>$ssvalue):($uukey!=$sskey?$all[] = array("id"=>$uukey, "amount"=>$uuvalue):''));
if($sskey===$uukey){
$all[] = array("id"=>$sskey, "amount"=>$ssvalue+$uuvalue);
}elseif($sskey!=$uukey){
$all[] = array("id"=>$sskey, "amount"=>$ssvalue);
}elseif($uukey!=$sskey){
$all[] = array("id"=>$uukey, "amount"=>$uuvalue);
}
}
}

最佳答案

我认为问题比看起来更简单。您实际上只需要一个条件来排除未定义的偏移通知。只需迭代两个数组中的所有键和值,并将值添加到合并数组中的相应键即可。

foreach ([$a1, $a2] as $a) {                             // iterate both arrays
foreach ($a as $key => $value) { // iterate all keys+values
$merged[$key] = $value + ($merged[$key] ?? 0); // merge and add
}
}

实际上,实际执行加法的行 ($merged[$key] = $value + ($merged[$key] ?? 0);) 可以简化为 $merged[$key] += $value;。这仍然有效,但它会产生一堆未定义的偏移通知。因此,我们可以将键设置为等于该值加上前一个值(如果存在)或零。

如果您仍在使用 PHP 5,则可以使用三元代替空合并运算符 (??),如下所示:

$merged[$key] = $value + (isset($merged[$key]) ? $merged[$key] : 0);

输出的顺序与您想要的结果中显示的顺序不同,但您可以使用 ksort($merged); 来实现

关于php - 如何合并两个数组并对重复键的值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44839218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com