我想解析一个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))
答案 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以完成数组。