Php 如何根据条件拆分阵列?

Php 如何根据条件拆分阵列?,php,mysql,arrays,shuffle,chunks,Php,Mysql,Arrays,Shuffle,Chunks,我正在开发一个PHP/MySQL应用程序,我有一个非常简单的表,如下所示: id | name | came_with 1 John null 2 Jane 1 3 Dean null 它有大约50条记录,但主要思想是它存储注册参加活动的人,如果他们带客人来,他们的名字也会与邀请他们的人的id一起存储在comed\u with字段中,非常简单 我必须将这些名字洗牌,并根据每个组中我想要的人数将它们分成X个组,这很容易,因为我可以将每个记录存储在一个数组中,使

我正在开发一个PHP/MySQL应用程序,我有一个非常简单的表,如下所示:

id | name | came_with
1    John    null
2    Jane    1
3    Dean    null
它有大约50条记录,但主要思想是它存储注册参加活动的人,如果他们带客人来,他们的名字也会与邀请他们的人的
id
一起存储在
comed\u with
字段中,非常简单

我必须将这些名字洗牌,并根据每个组中我想要的人数将它们分成X个组,这很容易,因为我可以将每个记录存储在一个数组中,使用
shuffle
随机排列顺序,使用
array\u chunk
根据人数生成更小的数组

问题是,我不能让人聚集在同一个组中,所以在这个例子中,John和Jane不能在同一个组中,但是如果我选择生成两个组,那么多带两个组的人也可以被放在同一个组中,因为没有选择。我对尝试这样做的逻辑非常迷茫,我不是在问确切的代码,而是在问如何实现它的想法


提前谢谢

如果您按“comed_with”和“id”对SQL进行排序,您就知道哪些人不应该聚集在同一组中。然后,您可以为这些“相同”组创建数组(您可以洗牌这些)。使用这些数组,您必须继续…

从查询结果中,您可以构建一个映射(或数组,因为您并不真正需要这些键),谁的键是“附带的”,谁的值是属于它们的id组。。。例如,构建的地图看起来像:

guestmap[0] => [1, 3] // John and Dean came by themselves
guestmap[1] => [2] // Jane came with John
从这里,您可以迭代此访客映射,以填充最终的数组。对于访客地图中的每个条目,检索它,洗牌它,然后将每个条目逐个放入数组中