【问题标题】:How to split an array based on a condition?如何根据条件拆分数组?
【发布时间】:2011-12-08 06:01:18
【问题描述】:

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

id | name | came_with
1    John    null
2    Jane    1
3    Dean    null

它有大约 50 条记录,但主要想法是它存储注册活动的人,如果他们带来客人,他们的名字也会与邀请他们的人的 id 一起存储在 came_with 字段中,很简单。

我必须将这些名称打乱,并根据我希望每个组中有多少人将它们分成 X 个组,这非常容易,因为我可以将每条记录存储在一个数组中,使用 shuffle 随机化order 和使用 array_chunk 根据人数生成更小的数组。

问题是我不能让一起来的人在同一个组中,所以在这个例子中,约翰和简不能在同一个组中,不过对于一个有两个以上的人来说没关系如果我选择生成 2 个组,则放在同一个组中,因为别无选择。我非常迷茫尝试这样做的逻辑应该是什么,我不是在询问确切的代码,而是询问如何完成它的想法。

提前致谢!

【问题讨论】:

    标签: php mysql arrays shuffle chunks


    【解决方案1】:

    如果您按“came_with”和“id”对 SQL 进行排序,您就知道哪些人不应该在同一个组中聚集在一起。然后,您可以为这些“相同”组创建数组(您可以随机播放这些组)。有了这些数组,你必须继续......

    【讨论】:

      【解决方案2】:

      从查询结果中,您可以构建一个映射(或数组,因为您并不真正需要键)谁的键是“came_with”,谁的值是属于它们的 id 组...例如,构建的地图如下所示:

      guestmap[0] => [1, 3] // John and Dean came by themselves
      guestmap[1] => [2] // Jane came with John
      

      从这里,您可以遍历这个 guestmap 来填充您的最终 groups 数组。对于 guestmap 中的每个条目,将其检索、随机播放,然后将每个条目一一放入您的 groups 数组中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-02
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-26
        相关资源
        最近更新 更多