2014-03-25 30 views
1

我得從一個MySQL結果如下JOIN:將數組從一個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 | 
+------------+----------------+-----------+---------+ 

...產生這個PHP數組:

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 
     ) 
) 

如何通過過濾session_id重複項將它處理爲以下嵌套數組?

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 
         ) 
       ) 
     ) 
) 
+0

您是否嘗試過的東西?這非常簡單。 – Passerby

回答

1

嘗試:

/* The first foreach stores the number of times each session_id is repeated */ 
$session_ids = array(); 
foreach($array as $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 will store each session_id once and loop through to 
the original array to find user details of that session_id and store them 
as nested arrays*/ 
$new_array = array(); 
$counter = 0; 
foreach($session_ids as $k=>$v){ 
    $new_array[$counter]['session_id'] = $k; 
    foreach($array as $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