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++; }
Comments
Post a Comment