代码之家  ›  专栏  ›  技术社区  ›  David

如何创建随机循环的合作伙伴分配?

  •  2
  • David  · 技术社区  · 14 年前

    我允许用户在我的网站上注册一个“游戏”;正常情况下,它们都会收到唯一的ID。在给定的时间点,注册将停止。当时,我想运行代码来分配合作伙伴,但不是成对的。

    +--------+-------+
    |用户id合作伙伴|
    +--------+-------+
    | 1 | |
    | |
    | |
    | 11 |
    | 12 | |
    | 18 |
    +--------+-------+

    我该怎么做才能得到这样的结果:



    +--------+--------+
    1 | 7 |
    3 | 12 |
    7 | 18 |
    | 1 |
    12 |
    | 18 |

    1,7,18,3,12,11;1,7,18,3,12,11

    $query = "SELECT users FROM tabl";
    $result = mysql_query ($query)
        or die ("Query '$query' failed with error message: \"" . mysql_error () . '"');
    
    while ($row = mysql_fetch_array($result)) {
        $users[] = $row[0];
    }
    
    $current = end($users);
    $partners = array();
    foreach ($users as $user)
    {
            $partners[$user] = $current;
            $current = $user;
    }
    print_r($partners);
    

    3 回复  |  直到 14 年前
        1
  •  5
  •   Sjoerd    14 年前
    • 检索用户列表。

    循环数组并分配伙伴的代码:

    $users = array('john', 'jack', 'jones', 'joelle', 'jesica');
    
    $current = end($users);
    $partners = array();
    foreach ($users as $user)
    {
            $partners[$user] = $current;
            $current = $user;
    }
    print_r($partners);
    
        2
  •  1
  •   Brendan Bullen    14 年前
    • 具有结果数组的两个副本
    • 将表更新为user\u id、partner\u id对

      $results = mysql_query("SELECT user_ids FROM -tablename- ORDER BY RAND()");
      
      $user_ids = array();
      $partner_ids = array();
      
      while($row = mysql_fetch_array($results))
      {
          $user_ids[] = $row['user_id'];
          $partner_ids[] = $rowp['user_id'];
      }
      
      $lastPartnerId = array_pop($partner_ids);
      array_unshift($partner_ids,$lastPartnerId);
      
      for($i=0;$i<count($user_ids);$i++)
      {
          mysql_query("UPDATE -tablename- SET partner_id = {$partner_ids[$i]} WHERE user_id = {$user_ids[$i]}");
      }
      
        3
  •  0
  •   Hinek    14 年前

    抱歉,如果有错误。。。我已经很久没有编写PHP了。。。

    $i = rand(1, length($players) - 1)
    for ($p = 0; $p < length($players); $p++)
    {
        $partners[$p] = $players[$i];
        if (++$i > length($players))
        {
            $i = 0;
        }
    }