我对此功能有疑问。它根据我的选择来排列域,但是有一个问题,前段时间发生了变化。域名是这样的 www.site.com www.sites2.com www.sitett3.com
我把它放在列表中:site,sites2,sitet3
简而言之,该安排仅包含域名,没有“ **www **”,也没有“ .com”
域名最近已更改为 wsw.site.com 23d.sites2.com dsd.sitett3.com 子域名每天都在变化
代码不再正确排列,因为它需要我每天更改列表中的域名
我想知道一种仅采用域的解决方案,即使子域发生变化或域扩展名发生变化
代码:
function souq_Genrator() {
add_menu_page( 'servers', 'servers sort' , 'administrator', 'servers', 'sortdivs', 'dashicons-cart' );
}
add_action('admin_menu', 'souq_Genrator');
function SortServers($servers){
$serverLink = [];
//$order = ['myviid','myvid','vidshare','vidshar','vidbem','vidbm',];
$order = array_values(get_option('serversorts'));
$ordered = array();
$i= count($order);
$e= 0;
foreach ($servers as $key => $server) {
preg_match('/src="([^"]+)"/', $server['code'], $match);
$url = $match[1];
$Link = str_replace("\r",'', $url);
$Link = parse_url($Link);
$servername = explode('.', str_replace('www.', '', $Link['host']))[0];
$newKey = array_search($servername,$order);
if (false !== $newKey) {
$ordered[$newKey] = $server;
$e++;
$i++;
}else{
$ordered[$i] = $server;
$i++;
}
}
ksort($ordered);
$ordered = array_values($ordered);
return $ordered;
?>
这里有很多猜测,因为您没有向我们提供所需的所有信息。如果
Link['host']
只包含域名,您想按 .
进行爆炸并取倒数第二个结果:
$servername = array_slice(explode('.', $Link['host']), -2, 1);
有两种域名:gTLD 和 ccTLD。 gTLD 以 3 个或更多字符结尾,ccTLD 以 2 个字符结尾,因此您只需用点分解域名,然后检查最后一项的长度。简单的代码是这样的:
function getDomainName(string $domain) :string
{
$domain = explode('.', $domain);
$i = count($domain) - 1;
return strlen($domain[$i]) == 2 ? $domain[$i - 2] : $domain[$i - 1];
}
注意:这并不能判断域名是否合法。