基本上我遇到的问题是我需要编写这个函数,可以使用像www.stackoverflow.com这样的URL并返回“com”。但是我需要能够返回相同的值,即使URL在末尾有一段时间,如“www.stackoverflow.com”。 这就是我到目前为止所拥有的。 if语句是我尝试在句点之前返回数组中的点,但我不认为我正在使用if语句。否则代码的其余部分完全应该做的事情。
<?php
function getTLD($domain)
{
$domainArray = explode("." , $domain);
$topDomain = end($domainArray);
if ($topDomain == " ")
$changedDomain = prev(end($domainArray));
return $changedDomain;
return $topDomain;
}
?>
答案 0 :(得分:1)
对于像这样的简单案例,不要使用正则表达式,它是昂贵且难以理解的。只需删除最后一个点(如果存在):
function getTLD($domain) {
$domain = rtrim($domain, '.');
return end(explode('.', $domain));
}
答案 1 :(得分:0)
使用正则表达式来做这样的事情。试试这个:
function getTLD($domain) {
return preg_replace("/.*\.([a-z]+)\.?$/i", "$1", $domain );
}
一个实例:http://codepad.org/km0vCkLz
详细了解正则表达式以及如何使用它们:http://www.regular-expressions.info/
答案 2 :(得分:0)
end
函数返回一个空字符串""
(没有任何空格)。您正在将$topDomain
与单个空格字符进行比较,因此if
未评估为true。
同样prev
函数需要数组输入,end($domainArray)
返回一个字符串,因此,$changedDomain = prev(end($domainArray))
应该抛出E_WARNING
。
由于end
更新了数组$domainArray
的内部指针,该指针在您调用$topDomain = end($domainArray)
时已更新,因此您无需在{{1}上调用end
在$domainArray
块内。
尝试:
if
以下是phpfiddle。