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']
         );

    }

+3


source to share


4 answers


$ 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

+1


source


Use array_merge function

for example:

$C = array_merge($A, $B);
print_r($C);

      



Read the tutorial on Merging Arrays

0


source


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 "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp";
        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

0


source


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

0


source







All Articles