Search code examples
phparraysobjectmerging-data

Merge two or more object arrays based on shared id


I am trying to merge two or more multidimensional array based on same ID.

All the arrays are populated from different database table queries.

My Goal: Trying to merge all the arrays together and fetch the data to view page table.

I'm using codeigniter frame work for my project.

$array1 is from the 'members' table. $array2, $array3 and $array4 are from the 'registration' table with a where condition.

My arrays:

$array1 = [
    1 => (object) [
        "mem_tbl_id" => 1,
        "m_name_e" => "Titus C.",
        "member_id" => "KZI37M3025",
        "gender" => "Male",
        "m_number" => 9489455057,
        "familyid" => "KZI54F2256"
    ],
    2 => (object) [
        "mem_tbl_id" => 2,
        "m_name_e" => "Baby Helen",
        "member_id" => "KZI45M6402",
        "gender" => "Female",
        "m_number" => null,
        "familyid" => "KZI54F2256"
    ],
    3 => (object) [
        "mem_tbl_id" => 3,
        "m_name_e" => "Satheesh Premananth T.",
        "member_id" => "KZI69M3438",
        "gender" => "Male",
        "m_number" => null,
        "familyid" => "KZI69F5619"
    ]
];

$array2 = [
    1 => (object) [
        "mem_tbl_id" => 1,
        "do_birth" => "1937-09-18"
    ],
    2 => (object) [
        "mem_tbl_id" => 2,
        "do_birth" => "1945-02-06"
    ],
    3 => (object) [
        "mem_tbl_id" => 3,
        "do_birth" => "1968-04-12"
    ]
];

$array3 = [
    3 => (object) [
        "mem_tbl_id" => 3,
        "do_baptism" => "1969-04-13"
    ]
];

$array4 = [
    1 => (object) [
        "mem_tbl_id" => 1,
        "do_confirm" => "1954-04-07"
    ],
    3 => (object) [
        "mem_tbl_id" => 3,
        "do_confirm" => "1990-04-29"
    ]
];

Desired result:

array (
  1 => 
  (object) array(
     'mem_tbl_id' => 1,
     'm_name_e' => 'Titus C.',
     'member_id' => 'KZI37M3025',
     'gender' => 'Male',
     'm_number' => 9489455057,
     'familyid' => 'KZI54F2256',
     'do_birth' => '1937-09-18',
     'do_confirm' => '1954-04-07',
  ),
  2 => 
  (object) array(
     'mem_tbl_id' => 2,
     'm_name_e' => 'Baby Helen',
     'member_id' => 'KZI45M6402',
     'gender' => 'Female',
     'm_number' => null,
     'familyid' => 'KZI54F2256',
     'do_birth' => '1945-02-06',
  ),
  3 => 
  (object) array(
     'mem_tbl_id' => 3,
     'm_name_e' => 'Satheesh Premananth T.',
     'member_id' => 'KZI69M3438',
     'gender' => 'Male',
     'm_number' => null,
     'familyid' => 'KZI69F5619',
     'do_birth' => '1968-04-12',
     'do_baptism' => '1969-04-13',
     'do_confirm' => '1990-04-29',
  ),
)

Solution

  • Use array_merge_recursive();

    $marger_array = array_merge_recursive($Array1, $Array2, $Array3, $Array4);
    
    var_dump($marger_array);
    

    Output: (Demo)

    array(9) {
      [0]=>
      object(stdClass)#1 (6) {
        ["mem_tbl_id"]=>
        int(1)
        ["m_name_e"]=>
        string(8) "Titus C."
        ["member_id"]=>
        string(10) "KZI37M3025"
        ["gender"]=>
        string(4) "Male"
        ["m_number"]=>
        int(9489455057)
        ["familyid"]=>
        string(10) "KZI54F2256"
      }
      [1]=>
      object(stdClass)#2 (6) {
        ["mem_tbl_id"]=>
        int(2)
        ["m_name_e"]=>
        string(10) "Baby Helen"
        ["member_id"]=>
        string(10) "KZI45M6402"
        ["gender"]=>
        string(6) "Female"
        ["m_number"]=>
        NULL
        ["familyid"]=>
        string(10) "KZI54F2256"
      }
      [2]=>
      object(stdClass)#3 (6) {
        ["mem_tbl_id"]=>
        int(3)
        ["m_name_e"]=>
        string(22) "Satheesh Premananth T."
        ["member_id"]=>
        string(10) "KZI69M3438"
        ["gender"]=>
        string(4) "Male"
        ["m_number"]=>
        NULL
        ["familyid"]=>
        string(10) "KZI69F5619"
      }
      [3]=>
      object(stdClass)#4 (2) {
        ["mem_tbl_id"]=>
        int(1)
        ["do_birth"]=>
        string(10) "1937-09-18"
      }
      [4]=>
      object(stdClass)#5 (2) {
        ["mem_tbl_id"]=>
        int(2)
        ["do_birth"]=>
        string(10) "1945-02-06"
      }
      [5]=>
      object(stdClass)#6 (2) {
        ["mem_tbl_id"]=>
        int(3)
        ["do_birth"]=>
        string(10) "1968-04-12"
      }
      [6]=>
      object(stdClass)#7 (2) {
        ["mem_tbl_id"]=>
        int(3)
        ["do_baptism"]=>
        string(10) "1969-04-13"
      }
      [7]=>
      object(stdClass)#8 (2) {
        ["mem_tbl_id"]=>
        int(1)
        ["do_confirm"]=>
        string(10) "1954-04-07"
      }
      [8]=>
      object(stdClass)#9 (2) {
        ["mem_tbl_id"]=>
        int(3)
        ["do_confirm"]=>
        string(10) "1990-04-29"
      }
    }