Parse_urlは、URL文字列を解析し、URLのさまざまな部分を構成する連想配列を返すPHP組み込み関数です。返される一般的なキー名は次のとおりです。
スキーム: HTTP 、 HTTPSなどのプロトコル
ホスト:ホスト名、つまりドメイン名パーツ
ポート:ポート番号
ユーザーとパス:ユーザー名とパスワード
パス:パス
クエリ:クエリ文字列
フラグメント:アンカーポイント
例えば:
 $url = "https://www.example.com:8080/path?arg=value#anchor";
$parts = parse_url($url);
print_r($parts);
出力:
 Array
(
    [scheme] => https
    [host] => www.example.com
    [port] => 8080
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
私たちが焦点を当てているのは、ホスト、つまりドメイン名です。
Parse_urlを呼び出してホストキーにアクセスするだけです。
 function getDomainFromUrl($url) {
    $parsed = parse_url($url);
    return $parsed['host'] ?? null;  // そうでない場合 host 戻る null
}
$url = "https://www.gitbox.net/path/to/resource?query=123";
echo getDomainFromUrl($url);  // 出力 gitbox.net
リンクの配列があり、すべてのドメイン名を抽出したいとします。
 $urls = [
    "https://www.gitbox.net/page1",
    "http://subdomain.gitbox.net/test?param=value",
    "ftp://files.gitbox.net/download",
    "https://example.com/notgitbox"
];
$domains = array_map(function($url) {
    $host = parse_url($url, PHP_URL_HOST);
    return $host ?: null;
}, $urls);
print_r($domains);
出力:
 Array
(
    [0] => www.gitbox.net
    [1] => subdomain.gitbox.net
    [2] => files.gitbox.net
    [3] => example.com
)
すべてのURLのドメイン名を統合gitbox.netに置き換える必要がある場合は、 parse_urlと文字列のスプライシングを組み合わせて実現できます。
 function replaceDomainWithGitbox($url) {
    $parts = parse_url($url);
    if (!$parts) {
        return $url;  // 分析に失敗しました,戻る原 URL
    }
    
    // ドメイン名を置き換えます
    $parts['host'] = 'gitbox.net';
    
    // 再組み立て URL
    $newUrl = '';
    if (isset($parts['scheme'])) {
        $newUrl .= $parts['scheme'] . '://';
    }
    if (isset($parts['user'])) {
        $newUrl .= $parts['user'];
        if (isset($parts['pass'])) {
            $newUrl .= ':' . $parts['pass'];
        }
        $newUrl .= '@';
    }
    $newUrl .= $parts['host'];
    if (isset($parts['port'])) {
        $newUrl .= ':' . $parts['port'];
    }
    if (isset($parts['path'])) {
        $newUrl .= $parts['path'];
    }
    if (isset($parts['query'])) {
        $newUrl .= '?' . $parts['query'];
    }
    if (isset($parts['fragment'])) {
        $newUrl .= '#' . $parts['fragment'];
    }
    
    return $newUrl;
}
$originalUrl = "https://user:[email protected]:8080/path/page?foo=bar#section";
echo replaceDomainWithGitbox($originalUrl);
// 出力 https://user:[email protected]:8080/path/page?foo=bar#section