重新启动PHP数组索引

时间:2019-04-19 22:15:06

标签: php sockets

我会解释:
我有一个套接字socket.php文件,该文件将为每个用户添加一个连接,以便该用户具有来自不同设备的多个连接。

$clients[] = $socketChange; // array_push($clients,$socketChange); // 505
$end = key (array_slice ($clients, -1, 1, TRUE)); // extract 505
$userConexion [$userId] [] = $end; // add to clientID socket 505

您要做的是将每个连接添加到客户端阵列,然后最后添加的套接字将其分配给相应的用户。因此用户可以在不同设备上进行多个会话,并且总共可以实时接收信息。

现在我的问题是...

我如何控制位置,即位置是否与用​​户连接1k 用户号为1001 $ clients的用户,他将向我展示$ clients [1001],如何在不删除已连接用户的情况下重新启动计数器。

我用unset() array_shift()关闭关闭了$clients套接字的客户端套接字。

示例:

$clients[0] = resource 0;
$clients[1,433]  = empty;
$clients[434]  = resource 434;
$clients[435]  = resource 435;
$clients[436,450]  = empty;
$clients[451]  = resource 435;
$clients[452,999]  = empty;
$clients[1000] = resource 1000;

新连接1001 添加到空位置。

示例:

<?php 

$a1 = array();
$a2 = array();

for ($i=1; $i < 4 ; $i++) { 
    $a1[] = array("hello{$i}" => "hello{$i}");
    $a2[] = array("hello{$i}" => "hello{$i}");
}

echo "<pre>";
unset($a1[1]);
unset($a2[1]);

$a1[] = array("hello11" => "hello11");
array_push($a2, array("hello11" => "hello11"));

print_r($a1); // 0,2,3
print_r($a2); // 0,2,3

// need insert in position empty in this example `1`.

1 个答案:

答案 0 :(得分:2)

我不确定您是否会理解您的问题,但是如果您想将新连接的数据添加到数组的第一个未占用索引中,则可以执行以下操作:

for($i=0; $i<count($clients)+1; $i++) {
  if(!isset($clients[$i]) {
    $clients[$i] = resource 1001;
    break;
  }
}

如果索引仍然存在于数组中并且根本不再具有值,请使用empty($clients[$i])代替!isset($clients[$i])