2011-12-08 9 views
0

私はPHP/MySQLのアプリに取り組んでいると私はこのようになります非常に単純なテーブルを持っている:条件に基づいて配列を分割する方法は?

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

それは約50の記録を持っていますが、主なアイデアは、それがイベントに登録人々を保存するということです彼らがゲストを持って来ても、came_withフィールドに招待された人のidと一緒に保存されていて、とてもシンプルです。

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

問題は、同じグループに集まった人を持つことができないということです。この例では、JohnとJaneは同じグループに参加することはできませんが、もう2人で選択肢がないので2つのグループを生成することを選択した場合、同じグループに配置されます。私はこのことをやろうとするためには論理が失われています。私は正確なコードを求めるのではなく、それを達成するためのアイデアを求めています。

ありがとうございます!

答えて

0

'came_with'と 'id'でSQLをソートすると、同じグループに一緒に来てはならない人が分かります。次に、これらの「同じ」グループの配列を作成できます(これらをシャッフルすることができます)。これらの配列を使用すると、移動する必要があります...

0

クエリ結果から、キーが実際には必要ないのでマップを構築することができます。誰がキーが「came_with」で、その値がグループであるか例えば、構築マップは次のようになりますので...彼らに属しているIDの:ここから

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

、あなたは最終グループ配列を埋めるために、このguestmapを反復処理することができます。 guestmapの各エントリについて、それを取得してシャッフルし、各エントリをグループアレイに1つずつ配置します。

関連する問題