php - Convert an array from a MySQL JOIN (with duplicates) into a nested associative array -


i've got following results mysql join:

+------------+----------------+-----------+---------+ | session_id | session_name   | user_name | user_id | +------------+----------------+-----------+---------+ |         13 | test session 1 | user 1    |      29 | |         13 | test session 1 | user 2    |      30 | |         14 | test session 2 | user 1    |      31 | |         14 | test session 2 | user 2    |      32 | |         14 | test session 2 | user 3    |      33 | |         14 | test session 2 | user 4    |      34 | +------------+----------------+-----------+---------+ 

... produces php array:

array (     [0] => array         (             [session_id] => 13             [session_name] => test session 1             [user_name] => user 1             [user_id] => 29         )      [1] => array         (             [session_id] => 13             [session_name] => test session 1             [user_name] => user 2             [user_id] => 30         )      [2] => array         (             [session_id] => 14             [session_name] => test session 2             [user_name] => user 1             [user_id] => 31         )      [3] => array         (             [session_id] => 14             [session_name] => test session 2             [user_name] => user 2             [user_id] => 32         )      [4] => array         (             [session_id] => 14             [session_name] => test session 2             [user_name] => user 3             [user_id] => 33         )      [5] => array         (             [session_id] => 14             [session_name] => test session 2             [user_name] => user 4             [user_id] => 34         ) ) 

how can process following nested array filtering session_id duplicates?

array (     [0] => array         (             [session_id] => 13             [session_name] => test session 1             [user] => array                 (                     [0] => array                         (                             [user_name] => user 1                             [user_id] => 29                         )                     [1] => array                         (                             [user_name] => user 2                             [user_id] => 30                         )                 )         )      [1] => array         (             [session_id] => 14             [session_name] => test session 2             [user] => array                 (                     [0] => array                         (                             [user_name] => user 1                             [user_id] => 31                         )                     [1] => array                         (                             [user_name] => user 2                             [user_id] => 32                         )                     [2] => array                         (                             [user_name] => user 3                             [user_id] => 33                         )                     [3] => array                         (                             [user_name] => user 4                             [user_id] => 34                         )                 )         ) ) 

try:

/* first foreach stores number of times each session_id repeated */ $session_ids = array(); foreach($array $k=>$v){      if(!array_key_exists($v['session_id'], $session_ids)){         $session_ids[$v['session_id']] = 1;     }     else     {         $session_ids[$v['session_id']] += 1;     } }   /*the second foreach store each session_id once , loop through original array find user details of session_id , store them nested arrays*/ $new_array = array(); $counter = 0; foreach($session_ids $k=>$v){     $new_array[$counter]['session_id'] = $k;     foreach($array $k1=>$v1){         if($v1['session_id'] == $k)         {             $new_array[$counter]['session_name'] = $v1['session_name'];             $new_array[$counter]['user'][] = array('user_name'=>$v1['user_name'], 'user_id'=>$v1['user_id']);         }     }      $counter++; } 

demo


Comments

Popular posts from this blog

user interface - How to replace the Python logo in a Tkinter-based Python GUI app? -

objective c - Greedy NSProgressIndicator Allocation -

how to set an OCR language in Google Drive -