Как объединить два массива и просто увеличить значения, когда ключи совпадают?
Оба массива могут содержать ключи, которых нет в другом, и оба могут иметь больше или меньше ключей, чем другие.
Поэтому я не могу просто взять один массив, выполнить цикл и сравнить его с другим, так как иногда «другой» массив может иметь больше значений. Это колеблется время от времени.
Слияние массива, похоже, тоже не работает, поскольку оно перезаписывает старое значение.
Мне нужно вернуть все уникальные ключи из обоих массивов, но когда ключ совпадает, мне нужно просто добавить два значения вместе.
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)
Порядок не важен.
Как насчет этого:
$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);
Вы можете добиться этого с помощью цикла а также и слияние массивов. По сути, вы выбираете один массив, который вы будете проверять на наличие дублирующихся значений, выполняете арифметику, 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()
операция.