遍历数组的强大方法

Khu*_*jaz 2 php arrays

我有XML文件中的数据,即

<domain>  
   <host>xyz</host>  
   <key>keeeeeeeeeey</key>  
</domain>
<domain>
  <host>xyz</host>  
   <key>keeeeeeeeeey</key> 
</domain>
Run Code Online (Sandbox Code Playgroud)

从XML我创建了稳健性的阵列有我知道如何发现使用XML我早就这样做了,但我缺乏的知识我使用转换该XML文件到数组:

 $json = json_encode($xml); 
 $array = json_decode($json,TRUE);`
Run Code Online (Sandbox Code Playgroud)

下面是我的数组:

Array
(
    [domain] => Array
        (
            [0] => Array
                (
                    [host] => bdbdfbdvbdbdfbdfbf.net
                    [key] => 933f416350de1a955544b30b5bb7ca09cfa2311101a22972320cc4c7af2ecedc03f36b8a48961ef938972478592a1e261819052b51c09a45cf805663f83cb2c0233969255a2c3e2e7e212a295a247b785d41
                )

            [1] => Array
                (
                    [host] => bdev1vvvvvvveinf.net
                    [key] => 933f416350de1a955544b30b5bb7ca09cfa2311101a22972320cc4c7af2ecedc03f36b8a48961ef938972478592a1e261819052b51c09a45cf805663f83cb2c0233969255a2c3e2e7e212a295a247b785d41
                )

            [2] => Array
                (
                    [host] => bdev1.aaaaaaaaureinf.net
                    [key] => 933f416350de1a955544b30b5bb7ca09cfa2311101a22972320cc4c7af2ecedc03f36b8a48961ef938972478592a1e261819052b51c09a45cf805663f83cb2c0233969255a2c3e2e7e212a295a247b785d41
                )

            [3] => Array
                (
                    [host] => bdennnnnnnninf.net
                    [key] => 933f416350de1a955544b30b5bb7ca09cfa2311101a22972320cc4c7af2ecedc03f36b8a48961ef938972478592a1e261819052b51c09a45cf805663f83cb2c0233969255a2c3e2e7e212a295a247b785d41
                )

            [4] => Array
                (
                    [host] => bdeveewerwerwerwerreinf.net
                    [key] => 933f416350de1a955544b30b5bb7ca09cfa2311101a22972320cc4c7af2ecedc03f36b8a48961ef938972478592a1e261819052b51c09a45cf805663f83cb2c0233969255a2c3e2e7e212a295a247b785d41
                )

        )

)
Run Code Online (Sandbox Code Playgroud)

我想要一个健壮的循环,如果我传递主机名,它将返回密钥.任何人都可以请一些光吗?阵列的大小可以增加到10亿加条目.

Mat*_*hew 5

将数组更改为:

$data = array('domain' => array(
  'bdbdfbdvbdbdfbdfbf.net' => '933...',
  'bdev1vvvvvvveinf.net' => '933...',
));
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

echo $data['domain']['bdbdfbdvbdbdfbdfbf.net'];
Run Code Online (Sandbox Code Playgroud)

使用当前阵列没有"强大"的方法.你必须搜索整个事情:

function get_key($data, $host)
{
    foreach ($data['domain'] as $domain)
    {
      if ($domain['host'] == $host)
        return $domain['key'];
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于这一新信息:

阵列的大小可以增加到10亿加条目.

我收回了这个答案的用处,因为使用任何纯文本格式(包括XML或序列化的PHP键值数组)来存储这些数据的整个概念都是疯狂的.

您应该将数据存储在索引域的数据库中.即使是sqlite数据库也是文本文件的线性探测的主要升级.

当然,有一些方法可以将数据存储在优化的自定义格式中,但实际上没有理由重新发明数据库可以轻松完成的任务.