如何根据该数组中的值对数组进行分组 - php(laravel)

时间:2014-01-30 00:32:35

标签: php arrays multidimensional-array

我有一个来自eloquent的查询,我将其转换为数组。我的目标是根据每个成员持有的组ID将多个成员分组到各自的组中。所以基本上我需要一个三维数组,第一个数组包含组ID,第二个数组包含每个成员的数组,第三个数据包含成员信息,即

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,它们只是由函数分配。

要使第一个数组键实际组ID,我执行了以下操作:

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

        }

但这只给了我每个小组的第一个成员而不再是。

解: 我希望在我的问题中发布答案仍然没问题,它只是在我写出这个问题时才找到我...

我实际上并没有在我的if条件中在$sorted[]内创建另一个数组,所以这就是为什么它没有附加其他成员,只有一个。我添加了一对括号:

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

它的工作原理:)。希望它能帮助将来的某个人。

1 个答案:

答案 0 :(得分:1)

$sorted = array();

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