1

$clientsObjects 配列の要素のインデックス キーを取得するこの関数があります。配列内の各要素は、ソケット リソースを返す getSocket() メソッドを持つ Client クラスのオブジェクトを保持します。

$socket 関数パラメーターが、配列内にある Client->getSocket() の 1 つと等しいことは 100% 確信しています。何らかの理由で、コードが if ステートメントに入ることはありません...何か提案はありますか?

function getClientObjectKey($socket)
{       
    global $clientsObjects;             
    while ($sock = current($clientsObjects))
    {                       
        if ($sock->getSocket() == $socket)          
            return key($clientsObjects);    
        $sock = next($clientsObjects);
    }           
}
4

1 に答える 1

3

を使用して同じことを行うことができます。これにより、キーに直接アクセスでき、反復を実行できます。そのため、foreachをいじる必要はありません。currentnextkey

foreach ($clientsObjects as $key => $sock){                       
  if ($sock->getSocket() == $socket)          
    return $key;    
} 

とにかく、key()あなたの場合、使用は問題にならないはずなので、比較しようとしているオブジェクト間に違いがあると思います。

于 2012-05-04T13:14:45.133 に答える