直奔主题,请帮忙调试下面程序
<?php
function hash_33($key)
{
$hash = 0;
if(is_numeric($key))
{
$hash = $hash *33 + $key;
}else
{
$len = strlen($key);
for($i = 0;$i<$len;$i++)
{
$hash = $hash * 33 + ord($key{$i});
}
}
return $hash & 0x7FFFFFFF;
}
class FlexiHash
{
private $serverList = array();
private $isSorted = FALSE;
function addServer($server)
{
$hash = hash_33($server);
if(! isset($this->serverList[$hash]))
{
$this->serverList[$hash] = $server;
}
$this->isSorted = FALSE;
return TRUE;
}
function removeServer($server)
{
$hash = hash_33($server);
if(isset($this->serverList[$hash]))
{
unset($this->serverList[$hash]);
}
$this->isSorted = FALSE;
return TRUE;
}
function lookup($key)
{
$hash = hash_33($key);
if (!$this->isSorted)
{
krsort($this->serverList,SORT_UNMERIC);
$this->isSorted = TRUE;
}
print_r($this->serverList);
exit;
foreach($this->serverList as $pos => $server )
{
if ($hash >= $pos)
{
return $server;
}
}
return $this->serverList[count($this->serverList) -1];
}
}
$hserver = new FlexiHash();
$hserver->addServer('192.168.1.10');
$hserver->addServer('192.168.1.2');
$hserver->addServer('192.168.1.3');
$hserver->addServer('192.168.1.4');
$hserver->addServer('192.168.1.5');
for($i=0;$i<30;$i++)
{
echo 'save key'.$i.' in server :',$hserver->lookup('key'.$i);
echo '<br />';
}
帮忙找到那30以内的数字分别存在哪台服务器。
<?php
function hash_33($key)
{
$hash = 0;
if(is_numeric($key))
{
$hash = $hash *33 + $key;
}else
{
$len = strlen($key);
for($i = 0;$i<$len;$i++)
{
$hash = $hash * 33 + ord($key{$i});
}
}
return $hash & 0x7FFFFFFF;
}
class FlexiHash
{
private $serverList = array();
private $isSorted = FALSE;
function addServer($server)
{
$hash = hash_33($server);
if(! isset($this->serverList[$hash]))
{
$this->serverList[$hash] = $server;
}
$this->isSorted = FALSE;
return TRUE;
}
function removeServer($server)
{
$hash = hash_33($server);
if(isset($this->serverList[$hash]))
{
unset($this->serverList[$hash]);
}
$this->isSorted = FALSE;
return TRUE;
}
function lookup($key)
{
$hash = hash_33($key);
if (!$this->isSorted)
{
krsort($this->serverList,SORT_UNMERIC);
$this->isSorted = TRUE;
}
print_r($this->serverList);
exit;
foreach($this->serverList as $pos => $server )
{
if ($hash >= $pos)
{
return $server;
}
}
return $this->serverList[count($this->serverList) -1];
}
}
$hserver = new FlexiHash();
$hserver->addServer('192.168.1.10');
$hserver->addServer('192.168.1.2');
$hserver->addServer('192.168.1.3');
$hserver->addServer('192.168.1.4');
$hserver->addServer('192.168.1.5');
for($i=0;$i<30;$i++)
{
echo 'save key'.$i.' in server :',$hserver->lookup('key'.$i);
echo '<br />';
}
帮忙找到那30以内的数字分别存在哪台服务器。