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