我有一个来自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;
它的工作原理:)。希望它能帮助将来的某个人。
答案 0 :(得分:1)
$sorted = array();
foreach ($members as $member) {
$groupid = $member['group_id'];
if (isset($sorted[$groupid])) {
$sorted[$groupid][] = $member;
} else {
$sorted[$groupid] = array($member);
}
}