2013-01-08 129 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庫。