2014-01-30 111 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

相关问题