0

基本上我遇到的问题是我需要编写这个函数,它可以采用像 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;


    }
?>
4

3 回答 3

1

不要在这样的简单情况下使用正则表达式,它的 CPU 成本高且不可读。如果存在,只需删除最后一个点:

function getTLD($domain) {
    $domain = rtrim($domain, '.');
    return end(explode('.', $domain));
}
于 2013-09-06T18:11:25.307 回答
0

The end function is returning an empty string "" (without any spaces). You are comparing $topDomain to single space character so the if is not evaluating to true.

Also prev function requires array input and end($domainArray) is returning a string, so, $changedDomain = prev(end($domainArray)) should throw an E_WARNING.

Since end updates the internal pointer of the array $domainArray, which is already updated when you called $topDomain = end($domainArray), you do not need to call end on $domainArray inside the if block.

Try:

if ($topDomain == "") {
   $changedDomain = prev($domainArray);
   return $changedDomain; // Will output com
}

Here is the phpfiddle for it.

于 2013-09-06T17:37:13.723 回答
0

对这样的事情使用正则表达式。尝试这个:

function getTLD($domain) {
    return preg_replace("/.*\.([a-z]+)\.?$/i", "$1", $domain );
}

一个活生生的例子:http ://codepad.org/km0vCkLz

阅读更多关于正则表达式以及如何使用它们的信息:http ://www.regular-expressions.info/

于 2013-09-06T17:28:04.397 回答