2011-11-26 95 views
0

我试图创建一个“秘密圣诞老人”类型的程序,以跟踪谁发送给谁。我有一个存储洗牌发送者和接收者ID的数据库,但是我遇到的问题是创建如何匹配下个月的发件人和接收者。它需要确保发件人不是连续两次发送给同一个人(或靠近在一起)。我有一个循环遍历4个数组,$ pastsenders,$ pastreceivers,$ currentsenders $ currentreceivers的想法,但我不知道如何比较这两个集合,看看是否有匹配,如果他们这样做,重新洗牌当前发送者和接收者。谁能帮忙?如何比较两组不同的阵列

回答

0

使用发件人的名称作为关键字,并使用接收者的名称作为值。

为了检查,你只需循环所有的键,看看在这个月份数组和下一个月份数组中是否有一个键值相同。如果是,那么你需要重新安排下个月的名单。

0

这是一个快速的解决方案。 秘密圣诞老人是一群人交换礼物的权利? 我的建议是将这个列表分成2个给予者和接收者。我知道技术上他们既是送货员又是接收者,但是他们的想法是有一个固定的列表,而另一个则被洗牌。

<?php 
    $givers = array("Person 1","Person 2","Person 3","Person 4","Person 5","Person 6") ; 
    $receivers = array("Person 7","Person 8","Person 9","Person 10","Person 11","Person 12"); 
    $new_receivers = $receivers; 
    $repeated_values = $new_receivers; 

    while(sizeof($repeated_values) > 0) 
    { 
     shuffle($new_receivers); 
     $repeated_values = array_intersect_assoc($receivers, $new_receivers); 
    } 
?> 

所以,如果可以让自己清楚。名单中的一半,提供者总是保持不变。然后你加载另一半的列表/最后一个交换的礼物,匹配他们的阵列位置的数组。随机播放接收者列表,直到所有位置都改变并完成。 有道理吗?希望这可以帮助。