簡體   English   中英

如何根據條件拆分數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM