0

i got 2 multidimensional arrays A and B. Every element of A has a counterpart in B. I want to combine those 2 part.

Does php has a method to do such a task.

Running 2 loops and checking for a match seems a bit inefficient.

Example:

$a = array(
     '0' => array(
          'id' = 1,
          'value_a' = 'v1'),
     '1' => array(
          'id' = 2,
          'value_a' = 'v2'),
     '2' => array(
          'id' = 3,
          'value_a' = 'v3'),

$b = array(
     '0' => array(
          'a_id' = 3,
          'value_b' = 'v3'),
     '1' => array(
          'a_id' = 1,
          'value_b' = 'v1'),
     '2' => array(
          'a_id' = 2,
          'value_b' = 'v2')  

Result:

 $c = array(
     '0' => array(
          'id' = 3,
          'value_a' = 'v3'),
          'a_id' = 3,
          'value_b' = 'v3'),
     '1' => array(
          'id' = 1,
          'value_a' = 'v1'),
          'a_id' = 1,
          'value_b' = 'v1'),
     '2' => array(
          'id' = 2,
          'value_a' = 'v2'),
          'a_id' = 2,
          'value_b' = 'v2')

Update

Loopmethod:

foreach ($a as $a_item) {
     foreach ($b as $b_item) {
         if ($a_item['id'] == $b_item['a_id']) {
              $c[] = array_merge($a_item, $b_item);
         }
     }
}

Thx

Cheetah
  • 506
  • 5
  • 16

2 Answers2

1

You actually want to merge the values of the parent array.PHP has no built in method as such to perform your task, but you can:

$combined_array = array_map(function($arr1, $arr2) { return array_merge($arr1, $arr2); }, $A, $B));
Sameer Shemna
  • 886
  • 10
  • 19
0

just 1 loop and array_merge

$result = array();
foreach($a as $k=>$v){
    $result[] = array_merge($v, $b[$k]);
}
Marin Vartan
  • 572
  • 7
  • 16