2

I have two arrays:

Array1:

array (size=3)
  0 => 
    array (size=5)
      'id' => string '11' (length=2)
      'request_id' => string '3' (length=1)
      'coach_uin' => string '802877145' (length=9)
      'date_intervention' => string '2015-06-01 00:00:00' (length=19)
      'time_slot' => string 'AM' (length=2)
  1 => 
    array (size=5)
      'id' => string '12' (length=2)
      'request_id' => string '3' (length=1)
      'coach_uin' => string '802310154' (length=9)
      'date_intervention' => string '2015-06-02 00:00:00' (length=19)
      'time_slot' => string 'PM' (length=2)
  2 => 
    array (size=5)
      'id' => string '13' (length=2)
      'request_id' => string '3' (length=1)
      'coach_uin' => string '801777170' (length=9)
      'date_intervention' => string '2015-06-03 00:00:00' (length=19)
      'time_slot' => string 'AM' (length=2)

Array 2:

array (size=3)
  0 => 
    array (size=9)
      'user_id' => string '5' (length=1)
      'user_role' => string 'coach' (length=5)
      'uin' => string '802877145' (length=9)
      'manager_uin' => string '607518069' (length=9)
      'phone' => string '8021111111' (length=10)
      'ouc' => string 'BVG1C3' (length=6)
      'email' => string 'brendan@XXXXXXXX.co.uk' (length=23)
      'first_name' => string 'Brendan' (length=7)
      'last_name' => string 'Kane' (length=4)
  1 => 
    array (size=9)
      'user_id' => string '4' (length=1)
      'user_role' => string 'coach' (length=5)
      'uin' => string '802310154' (length=9)
      'manager_uin' => string '607518069' (length=9)
      'phone' => string '802111111' (length=9)
      'ouc' => string 'BVG1C3' (length=6)
      'email' => string 'charlie@XXXXXXX.co.uk' (length=23)
      'first_name' => string 'Charles' (length=7)
      'last_name' => string 'McIntosh' (length=8)
  2 => 
    array (size=9)
      'user_id' => string '3' (length=1)
      'user_role' => string 'engineer' (length=8)
      'uin' => string '801777170' (length=9)
      'manager_uin' => string '607518069' (length=9)
      'phone' => string '801111111' (length=9)
      'ouc' => string 'BVG1C3' (length=6)
      'email' => string 'nat@XXXXXX.co.uk' (length=19)
      'first_name' => string 'Nat' (length=3)
      'last_name' => string 'Mcghie' (length=6)

I would like to merge this data into single array where there is a match between coach_uin in Array1 and uin in Array2.

I have tried: $merged_data = array_merge($coach_assignment_data,$coach_user_info);

But it returns like this:

array (size=6)
  0 => 
    array (size=5)
      'id' => string '11' (length=2)
      'request_id' => string '3' (length=1)
      'coach_uin' => string '802877145' (length=9)
      'date_intervention' => string '2015-06-01 00:00:00' (length=19)
      'time_slot' => string 'AM' (length=2)
  1 => 
    array (size=5)
      'id' => string '12' (length=2)
      'request_id' => string '3' (length=1)
      'coach_uin' => string '802310154' (length=9)
      'date_intervention' => string '2015-06-02 00:00:00' (length=19)
      'time_slot' => string 'PM' (length=2)
  2 => 
    array (size=5)
      'id' => string '13' (length=2)
      'request_id' => string '3' (length=1)
      'coach_uin' => string '801777170' (length=9)
      'date_intervention' => string '2015-06-03 00:00:00' (length=19)
      'time_slot' => string 'AM' (length=2)
  3 => 
    array (size=9)
      'user_id' => string '5' (length=1)
      'user_role' => string 'coach' (length=5)
      'uin' => string '802877145' (length=9)
      'manager_uin' => string '607518069' (length=9)
      'phone' => string '8021111111' (length=10)
      'ouc' => string 'BVG1C3' (length=6)
      'email' => string 'brendan@XXXXXX.co.uk' (length=23)
      'first_name' => string 'Brendan' (length=7)
      'last_name' => string 'Kane' (length=4)
  4 => 
    array (size=9)
      'user_id' => string '4' (length=1)
      'user_role' => string 'coach' (length=5)
      'uin' => string '802310154' (length=9)
      'manager_uin' => string '607518069' (length=9)
      'phone' => string '802111111' (length=9)
      'ouc' => string 'BVG1C3' (length=6)
      'email' => string 'charlie@XXXXXX.co.uk' (length=23)
      'first_name' => string 'Charles' (length=7)
      'last_name' => string 'McIntosh' (length=8)
  5 => 
    array (size=9)
      'user_id' => string '3' (length=1)
      'user_role' => string 'engineer' (length=8)
      'uin' => string '801777170' (length=9)
      'manager_uin' => string '607518069' (length=9)
      'phone' => string '801111111' (length=9)
      'ouc' => string 'BVG1C3' (length=6)
      'email' => string 'nat@XXXXX.co.uk' (length=19)
      'first_name' => string 'Nat' (length=3)
      'last_name' => string 'Mcghie' (length=6)

is there a faster way to merge based on uin?

Thanks

Shery
  • 1,808
  • 5
  • 27
  • 51
  • 2
    No idea what you are doing, but it sounds like these information are fetched from a database. Tried a query with joins instead? – tyteen4a03 May 13 '15 at 18:55
  • Also possible duplicate of http://stackoverflow.com/questions/17041278/php-how-to-merge-arrays-inside-array – tyteen4a03 May 13 '15 at 18:58

1 Answers1

0

To accomplish what you are asking you will have to merge the inner arrays of each array. One way to go about this is with nested foreach loops like this:

foreach($Array2 as $coach){
  foreach($Array1 as $assignment){
     if(strCmp($coach['uin'],$assignment['coach_uin']) === 0){
        $merged_data[] = array_merge($coach, $assignment);
     }
  }  
}
DMcP89
  • 705
  • 2
  • 10
  • 26