按主域排序

时间:2013-12-13 13:55:10

标签: php

我得到了一个网站网址列表:

http://www.example.com/
http://www.another.com/1/hi-hello
http://www.example.com/index.php
http://www.another.com/1/archive
http://www.example.com/about.php
http://www.another.com/

依此类推...所有都是随机顺序。

现在我想要的是按照这样的主域名对这个列表进行排序:

http://www.example.com/
- http://www.example.com/index.php
- http://www.example.com/about.php

http://www.another.com/
- http://www.another.com/1/hi-hello
- http://www.another.com/1/archive

那么有人能指出我正确的方向如何检测主域并列出其他域名?我正在考虑一个RegEx,但因为它可以是任何领域,所以认识到这是一项非常重要的工作......

3 个答案:

答案 0 :(得分:2)

使用parse_url

非常简单
<?php
$urls = Array(
    "http://www.example.com/",
    "http://www.another.com/1/hi-hello",
    "http://www.example.com/index.php",
    "http://www.another.com/1/archive",
    "http://www.example.com/about.php",
    "http://www.another.com/"
);

$urls_categorised = Array();

// First, group all the array elements by HOST
foreach ($urls as $url) {
    $host = parse_url($url, PHP_URL_HOST);
    if ($url != $host)
        $urls_categorised[$host][] = $url;
}

// Now render each category in the way you specified
foreach ($urls_categorised as &$x) {
    if (!count($x))
        continue;

    sort($x);
    print "{$x[0]}\n";
    array_shift($x);

    foreach ($x as $y)
        print "- {$y}\n";
}
?>

输出:

http://www.example.com/
- http://www.example.com/about.php
- http://www.example.com/index.php
http://www.another.com/
- http://www.another.com/1/archive
- http://www.another.com/1/hi-hello

Live demo

答案 1 :(得分:1)

您可以使用parse_url()函数从您拥有的网址获取主机。然后,您将能够以良好的方式分离您的结果。

答案 2 :(得分:0)

我要做的是将它们添加到数组中。创建一个循环来检查每个项目并爆炸每个数组项目。通过这种方式,您可以搜索数组术语并执行第二个循环,以仅提取与搜索查询匹配的人员 这样的事情?

array(
    key  => value,
    key2 => value2,
    key3 => value3,
    ...
)
foreach ($array as $value)
  {
  foreach ($array as $value2)
  {
  if ($value == $value2) echo "- " . $value2;
  }
  }

你必须爆炸$ value和$ value2当然能够获得域名