分配随机伙伴关系而不重复?

时间:2013-02-28 16:17:33

标签: php mysql pdo foreach

问题缩小到以下几点:

我有两个数组:user_in_needactive_usersuser_in_needactive_users的一部分。

Array ( [1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9] )  // active_users

Array ( [3]  [7]  [9] )                                // user_in_need

我需要从user_in_need数组中随机分配给每个active_users合作伙伴。一个警告,我不能让用户被指定为合作伙伴。

这是我能够[不起作用]:

$partners = array();
foreach ($user_in_need as $value) {
    $key = array_search($value, $active_users);
    unset($active_users[$key]);

    shuffle($active_users);
    $newpartner = end($active_users);

    $partners[$value] = $newpartner;
    $user = $value;

    $query = "UPDATE users SET target=:partner WHERE uid=:uid";
    $query_params = array(':partner' => $newpartner, ':uid' => $user );
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);
}

2 个答案:

答案 0 :(得分:0)

伪英语中的这个“伪代码”怎么样:

  • 获取现有合作伙伴
<?php
SELECT partner_id FROM users WHERE user_id = USER_ID

do{
    $partners[] = $row['partner_id']
}
?>
  • 现在选择不是他自己或已经成为合作伙伴的可用用户:
<?php
SELECT user_id  FROM users WHERE user_id != USER_ID AND partner_id NOT IN ( implode(', ', $partners) )
?>

完成工作!?

答案 1 :(得分:0)

我不认为自己能够自己解决这个问题,但现在是:

所有需要做的就是像我一样从active_users数组中删除值,执行所需的操作,然后,在完成所有操作后,只需将值添加回active_users在循环结束之前 - 从而将其恢复到原始状态。

所以,我刚刚在查询之前添加了$theliving[] = $value;