2014-01-30 110 views
1

我有一個來自轉換成數組的數據的查詢。我的目標是根據每個成員持有的組ID將多個成員分組到他們各自的組中。所以基本上,我需要一個三維陣列,與第一列保持組ID,第二保持每個成員的陣列,和第三保持該成員的信息即如何根據該數組中的值對數組進行分組 - php(laravel)

Array(

    [1] => array(
        array([member_id] => 3 
         [type] => human 
         [group_id] => 1 
         ), 
        array([member_id] => 4 
         [type] => alien 
         [group_id] => 1 
         ), 
       ) 
    [2] => array(
        array([member_id] => 9 
         [type] => human 
         [group_id] => 2 
         ), 
        array([member_id] => 10 
         [type] => alien 
         [group_id] => 2 
         ), 
       ) 
) 

我試過幾件事情,已經接近得到我這一目標的一個是:

通過他們的組排序他們給了我與各成員二維數組按升序返回,就像這樣:

Array 
(
    [0] => Array 
     (
      [member_id] => 7 
      [type] => human 
      [group_id] => 1 
     ) 

    [1] => Array 
     (
      [customer_id] => 5 
      [type] => alien 
      [group_id] => 1 
     ) 

    [2] => Array 
     (
      [customer_id] => 8 
      [type] => alien 
      [group_id] => 2 
     ) 
//there is no group #3, so next group is 4 
    [3] => Array 
     (
      [customer_id] => 3 
      [type] => human 
      [group_id] => 4 
     ) 
) 

但這些密鑰不是基於組ID,t他只是由該功能分配的。

爲了使第一陣列按鍵實際組ID,我做了以下內容:

 $sorted = array(); 
     $i=0; 
     while($i <= count($members)) 
     { 
      foreach($members as $member) 
      { 
       if($member['group_id'] == $i) 
       { 
        $sorted[$i] = $member; 
       } 
      } 
      echo $i; 
      $i++; 

     } 

但是,這給了我只爲每個組和沒有任何更多的第一個成員。

SOLUTION: 我希望它仍然是好的張貼在回答我的問題,它只是來找我,而我在寫了這個問題,哈哈...

我實際上並沒有創造內$sorted[]另一個數組在我的條件下,這就是爲什麼它不附加其他成員,只有一個。我添加了一對括號:

$sorted[$i][] = $member; 

它的作品:)。希望它能幫助未來的人。

回答

1
$sorted = array(); 

foreach ($members as $member) { 
    $groupid = $member['group_id']; 
    if (isset($sorted[$groupid])) { 
     $sorted[$groupid][] = $member; 
    } else { 
     $sorted[$groupid] = array($member); 
    } 
} 
+0

我得到了和我自己一樣的結果,但這樣更乾淨。然而,我的方法有什麼問題(除了太多的條件陳述外)?謝謝 – a7omiton

+0

雖然它可以工作,但依靠PHP創建空陣列時並不是「乾淨」的。這就像使用'。='連接到一個字符串,但不是首先將它初始化爲'''。如果您啓用警告,您可能會收到有關未定義索引引用的通知。 – Barmar

+0

謝謝你指出,我沒有意識到這一點。稍後將會考慮另一種解決方案。我興奮地玩了一場橋牌遊戲:D – a7omiton

相關問題