0

質問は次のように絞り込まれました。

と の 2 つの配列がuser_in_needありactive_usersます。 user_in_needのサブセットですactive_users

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

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

配列user_in_needから各パートナーにランダムに割り当てる必要があります。active_users1 つの注意点として、ユーザー自身をパートナーとして割り当てることはできません。

これは私が得ることができた限りです[うまくいきません]:

$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);
}
4

2 に答える 2

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) )
?>

仕事終わり!?

于 2013-02-28T17:26:43.667 に答える
0

私は自分でそれを理解することができるとは思っていませんでしたが、ここにあります:

行う必要があるのは、私が行ったように配列から値を削除しactive_users、必要なアクションを実行し、すべてが終了したら、active_usersループが終了する前に値を追加することです。これにより、元の状態に復元されます。 .

$theliving[] = $value;そのため、クエリの直前に: を追加しました。

于 2013-02-28T19:56:41.120 に答える