0

私はPHP/MySQLアプリに取り組んでおり、次のような非常に単純なテーブルがあります。

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

約50件のレコードがありますが、主なアイデアは、イベントに登録した人を保存することです。ゲストを連れてくると、フィールドにid招待した人の名前も保存されるので、非常に簡単です。came_with

これらの名前をシャッフルし、各グループに必要な人数に基づいてX個のグループに分割する必要があります。これは、各レコードを配列に格納しshuffle、順序をランダム化するために使用array_chunkし、生成するために使用できるため、非常に簡単です。人の数に応じて小さな配列。

問題は、同じグループに集まった人を入れることができないことです。したがって、この例では、ジョンとジェーンを同じグループに入れることはできません。ただし、さらに2人で来た人は、選択の余地がないため、2つのグループを生成することを選択した場合は同じグループ。私はこれを実行しようとするロジックがどうあるべきかについて非常に迷っています。正確なコードではなく、それを実現するためのアイデアを求めています。

前もって感謝します!

4

2 に答える 2

0

SQLを「came_with」、次に「id」で並べ替えると、同じグループに一緒になってはいけない人がわかります。次に、これらの「同じ」グループの配列を作成できます(これらをシャッフルできます)。これらのアレイを使用すると、続行する必要があります...

于 2011-12-08T07:57:29.490 に答える
0

クエリ結果から、キーが「came_with」であり、値がそれらに属するIDのグループであるマップ(または、キーは実際には必要ないため、配列)を作成できます。マップは次のようになります。

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

ここから、このゲストマップを反復処理して、最終的なグループ配列にデータを入力できます。ゲストマップのエントリごとに、それを取得してシャッフルしてから、各エントリをグループ配列に1つずつ配置します。

于 2011-12-08T08:26:24.933 に答える