0

I have two arrays with same indexes, and unfortunately array_merge_recursive doesn't work for me.

First array is like this:

$firstarray = array(
    0 => array('id' => 1, 'name' => 'John Smith'),
    1 => array('id' => 2, 'name' => 'Jane Doe')         
);

Where second array is:

$secondarray = array(
    0 => array('email' => 'john@smith.com'),
    1 => array('email' => 'jane@doe.com')
);

Desired output would be like this,

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => John Smith
            [email] => john@smith.com
        )

    [1] => Array
        (
            [id] => 2
            [name] => Jane Doe
            [email] => jane@doe.com
        )

)

But I am getting second array items appended to original array like this:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => John Smith
        )

    [1] => Array
        (
            [id] => 2
            [name] => Jane Doe
        )

    [2] => Array
        (
            [email] => john@smith.com
        )

    [3] => Array
        (
            [email] => jane@doe.com
        )

)
Alan Kis
  • 1,790
  • 4
  • 24
  • 47

4 Answers4

3
for($i = 0; $i<count($firstarray); $i++){
   $output[] = array_merge($firstarray[$i],$secondarray[$i]);
}

You can the above mentioned code or you can use array_map() & array_merge(). Like:

$output = array_map('array_merge', $firstarray, $secondarray);
Suyash
  • 176
  • 5
1

You guys sure go the complicated way :)

$mergedarray = array_map('array_merge', $firstarray, $secondarray);

Basically "merge the arrays of each index".

array_merge_recursive doesn't work because number index are not considered as associative key. So it just push the value instead of merging them.

Kulvar
  • 1,139
  • 9
  • 22
0

Try below code:-

$firstarray = array(
    0 => array('id' => 1, 'name' => 'John Smith'),
    1 => array('id' => 2, 'name' => 'Jane Doe')         
);

$secondarray = array(
    0 => array('email' => 'john@smith.com'),
    1 => array('email' => 'jane@doe.com')
);

Use simple foreach loop

$res = [];
foreach($firstarray as $k=>$record){
  $record['email'] = $secondarray[$k]['email'];
  $res[] = $record;
}
echo '<pre>'; print_r($res);

OR use array_map() function

$res = array_map(function($a,$b){
  return ['id'=>$a['id'],'name'=>$a['name'],'email'=>$b['email']];
},$firstarray,$secondarray);
echo '<pre>'; print_r($res);
Ravi Hirani
  • 6,511
  • 1
  • 27
  • 42
0

Try this:

    $firstarray = array(
    0 => array('id' => 1, 'name' => 'John Smith'),
    1 => array('id' => 2, 'name' => 'Jane Doe')
 );

  $secondarray = array(
    0 => array('email' => 'john@smith.com'),
    1 => array('email' => 'jane@doe.com')
  );

 foreach($firstarray as $key1 => $value1)
 {
   foreach($secondarray as $key2 => $value2)
   {
        if($key1 == $key2)
        {
            $firstarray[$key1]["email"] = $value2["email"];
        }
    }
 }
 print_r($firstarray);
Aks
  • 102
  • 8