解析url并在数组中添加每个子路径

时间:2016-12-21 17:46:39

标签: php arrays regex parsing url

我想解析一个URL并将其每个子路径添加为数组中的元素。

例如:

http://www.abcd.com/efgh/ijkl/mnop.php

对于此URL,数组将如下所示:

[
  'http://www.abcd.com',
  'http://www.abcd.com/efgh',
  'http://www.abcd.com/efgh/ijkl',
  'http://www.abcd.com/efgh/ijkl/mnop.php'
]

问题是我无法将爆炸路径添加到以前的路径。

explode("/",parse_url($url, PHP_URL_PATH))

4 个答案:

答案 0 :(得分:1)

通过解析网址,然后展开路径,您可以通过遍历路径来构建每条路径。

function urlArrays($url)
{
    $paths = array();
    $parsed = parse_url($url);
    if($parsed){
        $pathParts = explode("/",$parsed['path']);
        $current = $parsed['scheme'] . "://" . $parsed['host'];
        $paths[] = $current;
        for($i = 0; $i < count($pathParts); $i++)
        {
            if($pathParts[$i] != "")
            {
                $current = $current . "/" . $pathParts[$i];
                $paths[] = $current;
            }
        }
    }
    return $paths;
}

答案 1 :(得分:1)

这是一种方法。您可以使用parse_url拆分网址。在爆炸路径之后,我使用array_filter从数组中删除空值,并使用array_values重置密钥。

$url = 'http://www.abcd.com/efgh/ijkl/mnop.php';
$root = parse_url($url, PHP_URL_SCHEME) . '://' . parse_url($url, PHP_URL_HOST);
$paths = array_values(array_filter(explode('/', parse_url($url, PHP_URL_PATH))));

$arr[] = $root;
for ($i = 0; $i < count($paths); $i++) {
    $root .= '/' . $paths[$i];
    $arr[] = $root;
}
var_dump($arr);

<强>输出:

array(4) {
  [0]=>
  string(19) "http://www.abcd.com"
  [1]=>
  string(24) "http://www.abcd.com/efgh"
  [2]=>
  string(29) "http://www.abcd.com/efgh/ijkl"
  [3]=>
  string(38) "http://www.abcd.com/efgh/ijkl/mnop.php"
}

答案 2 :(得分:1)

您可以$c = $_COOKIE['count']; 从网址和parse_url功能构建一个数组,将explode拆分为一个数组,然后从那里开始循环,实现您的目标。 ;寻找。这里的代码是:

path

答案 3 :(得分:1)

以下是使用string access and modification by character的替代方法。

for ($i=0, $c=0, $path=''; isset($url[$i]); $path .= $url[$i++]) {
    if ($url[$i] == '/' && ++$c > 2) $paths[] = $path;
}
$paths[] = $url;

在这个循环中,

  • $i是字符串
  • 中的当前位置
  • $c是一个总计 /个字符(排除方案后的初始2)
  • $path是 路径,因为它一次重建一个字符

基本上,你逐个字符地迭代字符串(或者字节,真的),并且在最初的两个字符串之后遇到/时,将当前路径附加到数组。在循环之后,您附加整个URL以完成数组。