按域获取URL最低路径

时间:2015-08-12 08:31:29

标签: php

我有一个如下所示的数组......

$urls = array(
    "http://www.google.com",
    "http://www.google.com/maps",
    "http://www.google.com/mail",
    "https://drive.google.com/help",
    "https://www.youtube.com",
    "https://www.youtube.com/feed/subscriptions",
    "https://www.facebook.com/me",
    "https://www.facebook.com/me/friends"
);

我觉得这很难解释,但是我想把这个数组分解为只显示每个域的最低路径而没有重复,所以它看起来像这样......

$urls = array(
    "http://www.google.com",
    "https://drive.google.com/help",
    "https://www.youtube.com",
    "https://www.facebook.com/me"
);

2 个答案:

答案 0 :(得分:1)

这可以通过遍历数组并使用parse_url()检查host键来实现。以下逻辑将给出您想要的结果。

$output = array();

//Sort the array by character length
usort($urls, function($a, $b) {
   return strlen($a)-strlen($b);
});

array_walk($urls, function($url) use (&$output) {
   //Parse the URL to get its components
   $parsed_url = parse_url($url);
   //See if we've already added the host to our final array
   if( array_key_exists($parsed_url['host'], $output) === FALSE ) {
     //We haven't, so we can now add the url to our final array
     $output[$parsed_url['host']] = $url;
   }
});

https://eval.in/415655

答案 1 :(得分:0)

试试这个,

 $urls = array(
    "http://www.google.com",
    "http://www.google.com/maps",
    "http://www.google.com/mail",
    "https://drive.google.com/help",
    "https://www.youtube.com",
    "https://www.youtube.com/feed/subscriptions",
    "https://www.facebook.com/me",
    "https://www.facebook.com/me/friends"
);
$temp = array();
$res = array();
usort($urls, function($a, $b) {
   return strlen($a)-strlen($b);
});//sort the array based string length
foreach($urls as $url){
  $str = preg_replace('#^https?://#', '', $url);
  $strarray = explode("/", $str);
  if(!in_array($strarray[0], $temp)){
    $temp[] = $strarray[0];
    $res[] = $url;
  }
}
echo"<pre>";
print_r($res);
echo"</pre>";

<强>输出:

Array
(
    [0] => http://www.google.com
    [1] => https://www.youtube.com
    [2] => https://www.facebook.com/me
    [3] => https://drive.google.com/help
)