Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪种PHP数据结构用于使用唯一键快速查找单值?_Php_Search_Multidimensional Array_Hashtable - Fatal编程技术网

哪种PHP数据结构用于使用唯一键快速查找单值?

哪种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函数来进行搜

我有一个从我们的内部网络动态生成的URL列表。对于每个URL,我想:

  • 查找URL的IP地址
  • 将IP与IP及其关联服务器的列表进行比较
  • 返回与IP关联的服务器
  • 当然,IP在IP列表中是唯一的,那么是否有一种推荐的方法来最初存储IP值列表,以便我可以为其提供IP(密钥)并返回关联的服务器(值)

    我看过多维数组,甚至蛮力--只需为每个服务器的IP列表创建一个数组--但这似乎效率低下

    以下是我想要的PHP(psuedo):


    是否有任何特定的方法可以存储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阵列结构相比,内存使用更少。