我试图创造一个秘密圣诞老人"跟踪谁发送给谁的程序类型。我有一个存储洗牌的发件人和收件人ID的数据库,但我遇到的问题是创建如何匹配下个月的发件人和收件人。它需要确保发件人不连续两次(或靠近在一起)发送给同一个人。我有想法循环4个数组,$ pastsenders,$ pastreceivers,$ currentsenders $ currentreceivers,但我不知道如何比较两个集合,看看是否匹配,如果他们这样做,重新洗牌当前发送者和接收者。有人可以帮忙吗?
答案 0 :(得分:0)
使用发件人姓名作为密钥,并使用收件人姓名作为值。
要检查,您只需循环遍历所有键,并查看在this-month-array和next-month-array中是否存在具有相同值的键。如果是,那么你需要重新安排下个月的清单。
答案 1 :(得分: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);
}
?>
所以,如果可以让自己清楚。列表的一半,给予者,始终保持不变。然后加载最后交换礼物的另一半列表/数组,匹配它们的数组位置。随机播放列表,直到所有位置都改变为止。 说得通?希望这会有所帮助。