Combining two multidimensional arrays using a key and adding values
I want to concatenate two arrays using key (product_id) and add those values (usage). Array 1
Array
(
[0] => Array
(
[name] => Reschedule A Service
[usage] => 1
[product_id] => 8
)
[1] => Array
(
[name] => Adding An Image
[usage] => 1
[product_id] => 5
)
[2] => Array
(
[name] => Each Calendar Event
[usage] => 1
[product_id] => 14
)
)
Array 2
Array
(
[0] => Array
(
[name] => Adding An Image
[usage] => 1
[product_id] => 5
)
[1] => Array
(
[name] => Schedule A Service
[usage] => 3
[product_id] => 11
)
[2] => Array
(
[name] => Each Calendar Event
[usage] => 2
[product_id] => 14
)
[3] => Array
(
[name] => Sales Performance Dashboard
[usage] => 2
[product_id] => 30
)
[4] => Array
(
[name] => Quote
[usage] => 1
[product_id] => 32
)
)
I need this to be a merge and add use values.
Array
(
[0] => Array
(
[name] => Adding An Image
[usage] => 2
[product_id] => 5
)
[1] => Array
(
[name] => Schedule A Service
[usage] => 3
[product_id] => 11
)
[2] => Array
(
[name] => Each Calendar Event
[usage] => 3
[product_id] => 14
)
[3] => Array
(
[name] => Sales Performance Dashboard
[usage] => 2
[product_id] => 30
)
[4] => Array
(
[name] => Quote
[usage] => 1
[product_id] => 32
)
[5] => Array
(
[name] => Reschedule A Service
[usage] => 1
[product_id] => 8
)
)
This is my code for creating arrays
foreach ($ query-> rows as $ product) {
$ top_products [] = array (
'name' => $ product ['name'],
'usage' => $ product ['pusage'],
'product_id' => $ product ['product_id']
);
}
foreach ($ query_2-> rows as $ product) {
$ top_point_products [] = array (
'name' => $ product ['name'],
'usage' => $ product ['p_usage'],
'product_id' => $ product ['product_id']
);
}
source to share
$ first = array (
array (
"name" => "Reschedule A Service",
"usage" => 1,
"product_id" => 8
),
array (
"name" => "Adding An Image",
"usage" => 1,
"product_id" => 5
),
array (
"name" => "Each Calendar Event",
"usage" => 1,
"product_id" => 14
)
);
$ second = array (
array (
"name" => "Adding An Image",
"usage" => 1,
"product_id" => 5
),
array (
"name" => "Schedule A Service",
"usage" => 3,
"product_id" => 11
),
array (
"name" => "Each Calendar Event",
"usage" => 2,
"product_id" => 14
),
array (
"name" => "Sales Performance Dashboard",
"usage" => 2,
"product_id" => 30
),
array (
"name" => "Quote",
"usage" => 1,
"product_id" => 32
)
);
$ result = array_unique (array_merge ($ first, $ second), SORT_REGULAR);
Use array_unique and array_merge
source to share
try this code
<?php
$array1=array
(
0 => array(
'name' => "Reschedule A Service",
'usage' => 1,
'product_id' => 8
),
1 => Array
(
'name' => "Adding An Image",
'usage' => 1,
'product_id' => 5
),
2 => Array
(
'name' => "Each Calendar Event",
'usage' => 2,
'product_id' => 14
)
);
$array2=array
(
0 => Array
(
'name' => "Adding An Image",
'usage' => 1,
'product_id' => 5
),
1 => Array
(
'name' => "Schedule A Service",
'usage' => 3,
'product_id' => 11
),
2 => Array
(
'name' => "Each Calendar Event",
'usage' => 5,
'product_id' => 14
),
3 => Array
(
'name' => "Sales Performance Dashboard",
'usage' => 2,
'product_id' => 30
),
4 => Array
(
'name' => "Quote",
'usage' => 1,
'product_id' => 32
)
);
$product_id1=array_column($array1, 'product_id');
$product_id2=array_column($array2, 'product_id');
$new=array_intersect($product_id1,$product_id2);
foreach ($new as $key => $value) {
if(in_array($new[$key],$product_id2)){
$array2[array_search($new[$key],$product_id2)]['usage']+=$array1[$key]['usage'];
}
}
$new1=array_diff($product_id1,$product_id2);
foreach ($new1 as $key => $value) {
$array2[]=$array1[$key];
}
foreach ($array2 as $key => $value) {
echo "[".$key."]=><br>";
foreach ($value as $key1 => $value1) {
echo "      ";
echo "[".$key1."]=>".$value1."<br>";
}
echo "<br>";
}
?>
Output
[0] => [name] => Add image [Usage] => 2 [Product_id] => 5
[1] => [name] => Schedule A Service [Usage] => 3 [Product_id] => 11
[2] => [name] => Every calendar event [Usage] => 7 [Product_id] => 14
[3] => [name] => Sales performance dashboard [Usage] => 2 [Product_id] => 30
[4] => [Name] => Quote [Usage] => 1 [Product_id] => 32
[5] => [name] => Reschedule service [Usage] => 1 [Product_id] => 8
source to share
Use a array_merge
simple loop foreach
to check your state and update values usage
.
See below
$result = array_merge($arrArray1, $arrArray2);
$result2 = array();
foreach($result as $key => $value){
if(array_key_exists($value['product_id'], $result2)){
$result2[$value['product_id']]['usage'] += $value['usage'];
} else{
$result2[$value['product_id']] = $value;
}
}
print_r($result2);
If you want to reset your resulting array indices are used again array_merge
like this
$result2 = array_merge($result2);
Hope this helps
source to share