-1

Let's say I have following arrays:

Array
(
    [2001] => Array
        (
            [event_detail] => Array
                (
                    [1] => Array
                        (
                            [event_name] => Advocacy CPD 2019
                            [cpd_points] => 23
                        )

                    [5] => Array
                        (
                            [event_name] => Advocacy CPD 2019 new
                            [cpd_points] => 2
                        )

                )

        )

    [2002] => Array
        (
            [event_detail] => Array
                (
                    [2] => Array
                        (
                            [event_name] => Advocacy CPD 2011
                            [cpd_points] => 28
                        )

                    [4] => Array
                        (
                            [event_name] => Advocacy CPD 20195 new
                            [cpd_points] => 12
                        )

                )

        )

)

And the second one:

Array
(
    [2001] => Array
        (
            [event_detail] => Array
                (
                    [1] => Array
                        (
                            [event_name] => Advocacy CPD 2020
                            [cpd_points] => 27
                        )

                )

        )

    [2052] => Array
        (
            [event_detail] => Array
                (
                    [2] => Array
                        (
                            [event_name] => Advocacy CPD 2052
                            [cpd_points] => 258
                        )

                    [4] => Array
                        (
                            [event_name] => Advocacy CPD 2019445 new
                            [cpd_points] => 78
                        )

                )

        )

)

And desired output is:

Array
(
    [2001] => Array
        (
            [event_detail] => Array
                (
                    [1] => Array
                        (
                            [event_name] => Advocacy CPD 2019
                            [cpd_points] => 23
                        )

                    [5] => Array
                        (
                            [event_name] => Advocacy CPD 2019 new
                            [cpd_points] => 2
                        )

                    [6] => Array
                        (
                            [event_name] => Advocacy CPD 2020
                            [cpd_points] => 27
                        )

                )

        )

    [2002] => Array
        (
            [event_detail] => Array
                (
                    [2] => Array
                        (
                            [event_name] => Advocacy CPD 2011
                            [cpd_points] => 28
                        )

                    [4] => Array
                        (
                            [event_name] => Advocacy CPD 20195 new
                            [cpd_points] => 12
                        )

                )

        )

    [2052] => Array
        (
            [event_detail] => Array
                (
                    [2] => Array
                        (
                            [event_name] => Advocacy CPD 2052
                            [cpd_points] => 258
                        )

                    [4] => Array
                        (
                            [event_name] => Advocacy CPD 2019445 new
                            [cpd_points] => 78
                        )

                )

        )

)

The problem is I would like to merge these arrays on the same id[2001,2005,2002]. Desired output sorting should be the same as in the first array.

I have managed to merge these arrays with different way but failed:

How can I achieve this? Any help is much appreciated.

  • What exactly have you tried? – Nik Mar 25 '19 at 15:26
  • I have tried a few php array function like array_merge / array_combine.Also I have tried in foreach loop. Can you share your best idea, please? – Subhankar Acharjee Mar 25 '19 at 15:29
  • You can use my code. $ar1 = array("2001" => array("event_detail" => array('1' => array('event_name' => 'Advocacy CPD 2019' , 'cpd_points' => '23'),'5' => array('event_name' => 'Advocacy CPD 2019 new' , 'cpd_points' => '2'))),"2002" => array("event_detail" => array('2' => array('event_name' => 'Advocacy CPD 2011' , 'cpd_points' => '28'),'4' => array('event_name' => 'Advocacy CPD 20195 new' , 'cpd_points' => '12')))); – Subhankar Acharjee Mar 25 '19 at 15:30
  • $ar2 = array("2001" => array("event_detail" => array('1' => array('event_name' => 'Advocacy CPD 2020' , 'cpd_points' => '27'))),"2052" => array("event_detail" => array('2' => array('event_name' => 'Advocacy CPD 2052' , 'cpd_points' => '258'),'4' => array('event_name' => 'Advocacy CPD 2019445 new' , 'cpd_points' => '78')))); – Subhankar Acharjee Mar 25 '19 at 15:31

1 Answers1

1

Pretty simple, just loop the second array and merge using the key to the first array:

foreach($array2 as $key => $val) {
    $array1[$key]['event_detail'] = array_merge($array1[$key]['event_detail'],
                                                $val['event_detail']);
}
AbraCadaver
  • 78,200
  • 7
  • 66
  • 87