哪种PHP数据结构用于使用唯一键快速查找单值?
我有一个从我们的内部网络动态生成的URL列表。对于每个URL,我想:哪种PHP数据结构用于使用唯一键快速查找单值?,php,search,multidimensional-array,hashtable,Php,Search,Multidimensional Array,Hashtable,我有一个从我们的内部网络动态生成的URL列表。对于每个URL,我想: 查找URL的IP地址 将IP与IP及其关联服务器的列表进行比较 返回与IP关联的服务器 当然,IP在IP列表中是唯一的,那么是否有一种推荐的方法来最初存储IP值列表,以便我可以为其提供IP(密钥)并返回关联的服务器(值) 我看过多维数组,甚至蛮力--只需为每个服务器的IP列表创建一个数组--但这似乎效率低下 以下是我想要的PHP(psuedo): 是否有任何特定的方法可以存储IP/服务器列表?有没有推荐的内置PHP函数来进行搜
是否有任何特定的方法可以存储IP/服务器列表?有没有推荐的内置PHP函数来进行搜索?感谢您的帮助 我没有看到任何明显的理由来避免关联数组:
// IP to search
$ip = '127.0.0.1';
foreach ($IPServerList as $entry) {
if ($entry['ip'] == $ip) {
echo 'MATCH :) ';
var_dump($entry);
break;
}
}
$IPServerList = array(
'1.2.3.4' => "server1",
'2.1.3.4' => "server2",
'3.1.3.3' => "server1",
);
PHP double中的数组具有哈希/映射/字典,这取决于您习惯于调用它们的方式。关键是,您可以为数组索引使用任何唯一的字符串/数字,而且由于您似乎有一个IP到服务器名称的1对1映射,这似乎很理想
我认为您不太可能在PHP中找到一种更快的方式来访问您的数据,而且为了简单起见,您无法击败它:
if (array_key_exists($IPServerList, '192.168.1.1')) {
echo $IPServerList['192.168.1.1'];
}
上的PHP手册将非常有用。我没有看到任何明显的理由来避免关联数组:
$IPServerList = array(
'1.2.3.4' => "server1",
'2.1.3.4' => "server2",
'3.1.3.3' => "server1",
);
PHP double中的数组具有哈希/映射/字典,这取决于您习惯于调用它们的方式。关键是,您可以为数组索引使用任何唯一的字符串/数字,而且由于您似乎有一个IP到服务器名称的1对1映射,这似乎很理想
我认为您不太可能在PHP中找到一种更快的方式来访问您的数据,而且为了简单起见,您无法击败它:
if (array_key_exists($IPServerList, '192.168.1.1')) {
echo $IPServerList['192.168.1.1'];
}
上的PHP手册将非常有用。只需在ips上键入数组如何
$IPServerList = array(
'1.2.3.4' => 'server1',
'2.3.4.5' => 'server2',
'3.4.5.6' => 'server3'
);
PHP的数组是数组和散列的混合体,支持同时使用这两种类型的键,因此当IP也可以使用时,没有理由生成唯一的数字键:
echo $IPServerList['1.2.3.4']; // produces 'server1'
如果需要存储的不仅仅是名称,还可以嵌套数组:
$IPServerList['1.2.3.4'] = array('name' => 'server1', 'this' => 'x', 'that' => 'y')
直接从IP上键入阵列怎么样
$IPServerList = array(
'1.2.3.4' => 'server1',
'2.3.4.5' => 'server2',
'3.4.5.6' => 'server3'
);
PHP的数组是数组和散列的混合体,支持同时使用这两种类型的键,因此当IP也可以使用时,没有理由生成唯一的数字键:
echo $IPServerList['1.2.3.4']; // produces 'server1'
如果需要存储的不仅仅是名称,还可以嵌套数组:
$IPServerList['1.2.3.4'] = array('name' => 'server1', 'this' => 'x', 'that' => 'y')
如果使用数组存储数据,如示例中所示,可以使用in_数组检查数据是否存在
如果使用数组存储数据,还可以签出array\u search()和array\u key\u exists(),在示例中,可以使用in\u array检查数据是否存在
您还可以查看array\u search()和array\u key\u exists()这是我能想到的最好的方案
$servers= array(
'xxx.xxx.xxx.001' => array(
'name' => "server1",
'os' => "Windows"
),
'xxx.xxx.xxx.002' => array(
'name' => "server2",
'os' => "Linux"
),
'xxx.xxx.xxx.003' => array(
'name' => "server3",
'os' => "Mac"
)
);
这样做可以让您存储有关服务器的更多信息,而不是其名称,以及使用IP地址的访问设置,而无需循环
$ip = 'xxx.xxx.xxx.002';
if ($servers[$ip]){
$serverName = $servers[$ip]['name'];
$serverOs = $servers[$ip]['os'];
}
这是我能想到的最好的方案
$servers= array(
'xxx.xxx.xxx.001' => array(
'name' => "server1",
'os' => "Windows"
),
'xxx.xxx.xxx.002' => array(
'name' => "server2",
'os' => "Linux"
),
'xxx.xxx.xxx.003' => array(
'name' => "server3",
'os' => "Mac"
)
);
这样做可以让您存储有关服务器的更多信息,而不是其名称,以及使用IP地址的访问设置,而无需循环
$ip = 'xxx.xxx.xxx.002';
if ($servers[$ip]){
$serverName = $servers[$ip]['name'];
$serverOs = $servers[$ip]['os'];
}
然后,他可能需要将“ip”字段设置为多维数组,以便将相应的服务器与之关联。然后,他可能需要将“ip”字段设置为多维数组,以便将相应的服务器与之关联。。。而且内存使用量比OPs阵列结构要少。。。与OPs阵列结构相比,内存使用更少。