-1

I'm looking for the best solution to do a "merge" based on a key value between 2 arrays with elements with a common key.

Inputs :

Array1 => [{"id" : "1", "LastName":"Jackson"}, {"id" : "2", "LastName":"Bross"} ]

Array2 =>[{"id" : "1", "FirstName":"Mickael"},{"id" : "2", "FirstName":"Mario"} ]

Ouput :

[{"id" : "1", "FirstName":"Mickael", "LastName":"Jackson"},
{"id" : "2", "FirstName":"Mario", "LastName":"Bross"} ]

Thanks for your help.

Alok Patel
  • 7,842
  • 5
  • 31
  • 47
jup31
  • 53
  • 8
  • 1
    Possible duplicate of [PHP Array Merge two Arrays on same key](http://stackoverflow.com/questions/14842272/php-array-merge-two-arrays-on-same-key) – Sujeet Sinha Jun 17 '16 at 09:42
  • 2
    please include code of any attempt you have made so far – SML Jun 17 '16 at 09:42
  • I finaly used something using a key to merge like David Jawphan suggest. Thanks a lot. – jup31 Jul 08 '16 at 09:42

2 Answers2

1

I think inner data is object so we can use foreach and if id is match assign object data by object->key = value format

foreach ($array1 as $key => $value) {
    foreach ($array2 as $k => $v) {
        if($value->id == $v->id){
            $array1[$key]->FirstName = $v->FirstName;
        }
    }
}
var_dump($array1);

//output

array (size=2)
  0 => 
    object(stdClass)[1]
      public 'id' => string '1' (length=1)
      public 'LastName' => string 'Jackson' (length=7)
      public 'FirstName' => string 'Mickael' (length=7)
  1 => 
    object(stdClass)[2]
      public 'id' => string '2' (length=1)
      public 'LastName' => string 'Bross' (length=5)
      public 'FirstName' => string 'Mario' (length=5)
Jack jdeoel
  • 4,554
  • 5
  • 26
  • 52
0

Note that to do thid you must have the same number of elements on last and first name arrays:

$lastNames = array(
    array(
        'id' => 1,
        'lastName' => 'Kent'
    ),
    array(
        'id' => 2,
        'lastName' => 'Snow'
    ),
    array(
        'id' => 3,
        'lastName' => 'Parker'
    ),
);
$firstNames = array(
    array(
        'id' => 1,
        'firstName' => 'Clark'
    ),
    array(
        'id' => 2,
        'firstName' => 'John'
    ),
    array(
        'id' => 3,
        'firstName' => 'Peter'
    ),
);

$people = array();
foreach($firstNames as $key => $data) {
    $people[] = array(
        'id' => $data['id'],
        'FirstName' => $data['firstName'],
        'LastName' => $lastNames[$key]['lastName']
    );
}

print_r($people);

Output:

Array
(
    [0] => Array
        (
            [id] => 1
            [FirstName] => Clark
            [LastName] => Kent
        )

    [1] => Array
        (
            [id] => 2
            [FirstName] => John
            [LastName] => Snow
        )

    [2] => Array
        (
            [id] => 3
            [FirstName] => Peter
            [LastName] => Parker
        )

)
Miguel
  • 1,579
  • 5
  • 18
  • 31