php单个值的多个键

时间:2015-02-17 01:22:35

标签: php key

当前设计

我正在制作一个聊天应用程序,任何2个随机用户都可以在这里聊天。

在服务器上(在php中),我有一个存储客户端对的数组,用于访问这些对的密钥是客户端ID之一。

我不喜欢这个的原因是我必须将客户端对存储在数组中两次。我不知道哪个客户端会先断开连接,所以我将它哈希两次,每个客户端ID一次。

如果还不清楚,那么过程是: 客户A和B正在聊天。 客户端B断开连接,因此我使用密钥B访问该对,找出其他客户端的ID为A,然后使用密钥A和B取消设置这两个元素。

问题

有更好的想法吗? 如果可以使用2个键来访问数组中完全相同的元素,那将会很好,但我认为不存在。

P.S。

(根据描述,此客户端对象可能听起来没用,但它也保存了每个客户端的相应套接字,当发生断开连接时,我可以使用该套接字从服务器发送消息。)

我是如何用代码描绘的:

/* The server receives a message from a client with id 1000 that he has left chat */

$client_pairs = array();  //map holding all client pairs currently chatting

connectClients( $client1, $client2 )
{
    $client_pairs[$client1 -> id] = array( $client1, $client2 );
    $client_pairs[$client2 -> id] = array( $client2, $client1 );
}

disconnectClient( $client_id )
{
    $client_pair = $this -> client_pairs[$client_id] 
    $client2 = $client_pair[1];

    unset( client_pairs[$client_id] );
    unset( client_pairs[$client2 -> id] );

    /*
       do stuff with the $client_pair
    */
}

1 个答案:

答案 0 :(得分:1)

你可以有两个数组:$ users和$ sessions。例如,让我们说,你有两个用户:client_id1和client_id2。然后你可以:

$sessions[] = your session information, e.g. sockets, plus both client_ids
end($sessions);
$sessId = key($sessions);
$users[$cliend_id1] = $sessId;
$users[$cliend_id2] = $sessId;

当有人断开连接时,请将其ID用作:

$sess = $sessions[$users[$id]];

$ sess然后应该拥有你需要的一切。