[英]How to split an array based on a condition?
我正在使用PHP / MySQL應用程序,並且有一個非常簡單的表,如下所示:
id | name | came_with
1 John null
2 Jane 1
3 Dean null
它有大約50條記錄,但是主要思想是它存儲了注冊活動的人,如果他們帶來客人,他們的名字也將與邀請他們的人的id
一起存儲在came_with
字段中,非常簡單。
我必須對這些名稱進行混洗,然后根據每個組中想要的人數將它們分成X個組,這非常容易,因為我可以將每個記錄存儲在數組中,使用shuffle
隨機化順序,並使用array_chunk
根據人數來生成更小的數組。
問題是我不能有一個人在一起,所以在這個例子中,約翰和簡不能在一起,但對於另外兩個人的人來說,也可以如果我選擇生成2個群組,則是同一群組,因為別無選擇。 我非常迷失嘗試執行此操作的邏輯,我不是在要求確切的代碼,而是在尋求實現此方法的想法。
提前致謝!
如果按“ came_with”和“ id”對SQL進行排序,那么您將知道哪些人不應該在同一組中在一起。 然后,您可以為這些“相同”組創建數組(可以將它們洗牌)。 使用這些陣列,您必須繼續...
從查詢結果中,您可以構建一個映射(或數組,因為您實際上不需要鍵),誰的鍵是“ came_with”,誰的值是屬於它們的id的組...因此,例如,地圖如下所示:
guestmap[0] => [1, 3] // John and Dean came by themselves
guestmap[1] => [2] // Jane came with John
在這里,您可以遍歷此guestmap,以填充最終的groups數組。 對於guestmap中的每個條目, 對其進行檢索,將其隨機播放,然后將每個條目一個一個地放入組數組中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.