объединить массив и увеличить значение int, когда ключ совпадает в php?

Как объединить два массива и просто увеличить значения, когда ключи совпадают?
Оба массива могут содержать ключи, которых нет в другом, и оба могут иметь больше или меньше ключей, чем другие.

Поэтому я не могу просто взять один массив, выполнить цикл и сравнить его с другим, так как иногда «другой» массив может иметь больше значений. Это колеблется время от времени.

Слияние массива, похоже, тоже не работает, поскольку оно перезаписывает старое значение.

Мне нужно вернуть все уникальные ключи из обоих массивов, но когда ключ совпадает, мне нужно просто добавить два значения вместе.

Array_a:

["BMW-B2"]=>int(1)
["BMW-N-115 "]=>int(5)
["BMW-N-143"]=>int(3)
["BMW-N-163"]=>int(10)
["BMW-N-184"]=>int(4)

Array_b

["CR220036"]=>int(3)
["BMW-N-163"]=>int(9)
["CR220822"]=>int(7)

Array_merged

["BMW-B2"]=>int(1)
["CR220036"]=>int(3)
["CR220822"]=>int(7)
["BMW-N-115 "]=>int(5)
["BMW-N-143"]=>int(3)
["BMW-N-163"]=>int(19)  //  <--  this has increast by 9
["BMW-N-184"]=>int(4)

Порядок не важен.

0

Решение

Как насчет этого:

$arr1=array(1,2,3,4);
$arr2=array(1,2,5=>1);
$result=array();
foreach($arr1 as $k=>$v){
$result[$k]=$v;
if(isset($arr2[$k])){
$result[$k]+=$arr2[$k];
}
}
foreach($arr2 as $k=>$v){
if(!isset($result[$k]){
$result[$k]=$v;
}
}
var_dump($result);
0

Другие решения

Вы можете добиться этого с помощью цикла а также и слияние массивов. По сути, вы выбираете один массив, который вы будете проверять на наличие дублирующихся значений, выполняете арифметику, unset больше не нужны элементы массива, а затем объединить все это вместе.

Попробуйте адаптировать свой код, как показано ниже:

$array1 = array("val1" => 5, "val2" => 8, "val3" => 10, "val4" => 2, "val5" => 12);
$array2 = array("val3" => 9, "val6" => 11, "val1" => 15);

foreach ($array2 as $key => $value)
{
if (array_key_exists($key, $array1))
{
$array1[$key] += $value;
unset($array2[$key]);
}
}

$merged = array_merge($array1, $array2);

var_dump($merged);

//Output:
array(6) {
["val1"]=>
int(20)
["val2"]=>
int(8)
["val3"]=>
int(19)
["val4"]=>
int(2)
["val5"]=>
int(12)
["val6"]=>
int(11)
}

В моем примере все значения в $array2 сравниваются с $array1 найти дубликаты ключей и увеличить на сохраненное значение. Если дублирование найдено, то этот элемент не установлен, это предотвратит изменение ключей в $array1 от перезаписи в array_merge() операция.

0

По вопросам рекламы [email protected]