2013-01-08 85 views
1

查找一个域名和域扩展我有包含与TLD扩展某些域数据的数组。我想单独收集域名和TLD扩展。PHP从阵列

E.g.从“hello.com”我想收集“你好”作为一个变量,然后收集“.com”作为另一个变量。

另一个例如重要的是,从“hello.co.uk”我想收集“你好”作为一个变量,然后收集“.co.uk”作为另一个变量。

我使用pathinfo()的当前代码将在“hello.com”上正常工作,但不会在“hello.co.uk”上正常工作。对于“hello.co.uk”,它将收集“hello.co”作为一个变量,然后收集“.uk”作为另一个变量。

这里是我使用的代码:

// Get a file into an array 
$lines = file($_FILES['file']['tmp_name']); 

// Loop through array 
foreach ($lines as $line_num => $line) { 
    echo $line; 

    //Find TLD 
    $tld = ".".pathinfo($line, PATHINFO_EXTENSION); 
    echo $tld; 

    //Find Domain 
    $domain = pathinfo($line, PATHINFO_FILENAME); 
    echo $domain; 
    } 

希望我解释说不够好。 我使用了很多stackoverflow,但是找不到这个的具体例子。

感谢

+1

['list($ domain,$ tld)= explode('。',$ line,2);'](http://php.net/explode) – hakre

+0

'$ data = explode(“。” $ file_name);' 'print_r($ data);' – Daya

+2

你想得到什么'subdomain.hello.co.uk'?到目前为止给出的答案将给出domain ='subdomain',扩展='hello.co.uk'。 – Barmar

回答

4

而是使用用于文件的功能,你可以只用一些简单的字符串操作:

$domain = substr($line, 0, strpos($line, ".")); 
$tld = substr($line, strpos($line, "."), (strlen($line) - strlen($domain))); 
+0

编辑我strpos到因为的strstr我怀疑我自己,然后才意识到我是正确的第一次...教训:永远不要怀疑一个人的自我。 – Taz

+0

短小简单的作品。易于添加到我的代码 – user1956779

1

第一种方法:

$domains = array("hello.co.uk", "hello.com"); 

foreach ($domains as $d) { 

    $ext = strstr($d, '.'); // extension 
    $index = strpos($d, '.'); 

    $arr = str_split($d, $index); 

    $domain = $arr[0]; // domain name 


    echo "domain: $domain, extension: $ext <br/>"; 

} 

第二种方法:(感谢hakre)

$domains = array("hello.co.uk", "hello.com"); 

foreach ($domains as $d) { 

    list($domain, $ext) = explode('.', $d, 2); 
    echo "domain: $domain, extension: $ext <br/>"; 

} 
0

这里有一个功能是相当灵活的,并且将一切从example.com工作http://username:[email protected]/public_html/test.zipftp://[email protected]http://www.reddit.com/r/aww/comments/165v9u/shes_allergic_couldnt_help_herself/

function splitDomain($url) { 
$host = ""; 
$url = parse_url($url); 
if(isset($url['host'])) { 
    $host = $url['host']; 
} else { 
    $host = $url['path']; 
} 
$host = str_replace('www.','',$host); 
$tmp = explode('.', $host); 
$name = $tmp[0]; 
$tld = $tmp[1]; 
return array('name'=>$name,'tld'=>$tld); 
} 
+0

很好的答案! :) +1(PS。我是来自这里的人http://stackoverflow.com/questions/14087116/extract-address-from-string) – 2013-01-08 06:09:16

+0

ps。我推送了你;] –

+0

是的,我正在检查微博... – 2013-01-08 22:04:21

0

没有什么比这样做其他使用法律扩展的大表没有可靠的方法。

一个受欢迎的表格被称为Public Suffix List

0

对于有两个(co.uk)和三个级别的顶级域名(act.edu.au)的工作,你需要在使用Public Suffix List(顶级域的列表),我建议使用TLDExtract库。