PHP递归打印URL的每个部分

时间:2013-03-12 19:38:23

标签: php function url recursion explode

我有一个关于在PHP中创建递归函数的问题。在用“/”分隔后打印URL的所有状态有什么更好的方法?

PS:基本情况将基于URL 例如http://www.domain.com

我需要的是:

示例:

$url = 'http://www.domain.com/1/2/3/4';

function strip_states($url){
  ?????
}

strip_states();

// Result
// print -> http://www.site.com.br/1/2/3
// print -> http://www.site.com.br/1/2
// print -> http://www.site.com.br/1
// print -> http://www.site.com.br

我完全失去了。

3 个答案:

答案 0 :(得分:2)

<?php

$url = 'http://www.domain.com/1/2/3/4';

$parts = explode('/', $url);

for ($i=count($parts); $i>=3; $i--) {
    echo implode('/', $parts) . PHP_EOL;
    array_pop($parts);
}

答案 1 :(得分:0)

<?php

$url = 'http://www.domain.com/1/2/3/4';

function strip_states($url)
{
    $url_parts = parse_url($url);
    $host = $url_parts['scheme'] . '://' . $url_parts['host'];

    if(false === isset($url_parts['path'])) {
        echo $host;
        return;
    }

    foreach(explode('/', $url_parts['path']) as $key => $part) 
    {
        if($key)
        {
             echo $host .= '/' . $part;
         echo "<br/>";
        }
    }
}

strip_states($url);

答案 2 :(得分:0)

抱歉,它不是递归的,但我希望它能以某种方式帮助你:

$url = 'http://www.domain.com/1/2/3/4';
strip_url($url);


function strip_url($url)
{
$largo = strlen($url);
$aux = ""; $cont = 0;
echo $url." len $largo"."</br>";

for ($i=0; $i<$largo; $i++)
{   
    if($url[$i]=="/"){$cont++;}  
    $aux = $aux.$url[$i];

    if($cont > 2 && $url[$i]=="/")
    echo $aux."</br>";    
}
echo $aux."</br>"; 


}

来自智利的Saludos;)