基本上我遇到的问题是我需要编写这个函数,它可以像 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;
}
?>
不要在这样的简单情况下使用正则表达式,它是 CPU 昂贵且不可读的。只需删除最后一个点(如果存在):
function getTLD($domain) {
$domain = rtrim($domain, '.');
return end(explode('.', $domain));
}
end
函数返回一个空字符串""
(没有任何空格)。 您正在将$topDomain
与单个空格字符进行比较,因此if
的计算结果不是 true。
此外prev
函数需要数组输入,并且end($domainArray)
返回一个字符串,因此,$changedDomain = prev(end($domainArray))
应该抛出一个E_WARNING
。
由于end
更新了数组$domainArray
的内部指针,当你调用$topDomain = end($domainArray)
时已经更新了,所以你不需要在if
块内部的$domainArray
上调用end
。
尝试:
if ($topDomain == "") {
$changedDomain = prev($domainArray);
return $changedDomain; // Will output com
}
这是它的别名。
对类似的事情使用正则表达式。试试这个:
function getTLD($domain) {
return preg_replace("/.*'.([a-z]+)'.?$/i", "$1", $domain );
}
一个活生生的例子:http://codepad.org/km0vCkLz
阅读有关正则表达式以及如何使用它们的更多信息:http://www.regular-expressions.info/