php树站点地图算法,没有任何游记

时间:2016-03-02 16:14:53

标签: php algorithm sitemap

我想创建一个站点地图生成器,生成的站点地图必须像树一样。有人能指出我这样做的算法吗?或者有人知道算法吗? 站点地图的结构应如下所示:

enter image description here

我正在考虑使用数组来做到这一点,但我想不出一个算法来从网站获取所有链接并构建数组。

1 个答案:

答案 0 :(得分:1)

我想出了

<?php
$links = array('bla.com/bla1/bla2', 'bla.com/bla1', 'bla.com/bla1/bla3', 'bla.com', 'bla.com/blabla/bla1/bla4', 'bla.com/blabla/otherbla/onemorebla');
$links = array_fill_keys($links, 0);
foreach($links as $key => $value){
    $levelsNumber = count(explode('/', $key));
    $links[$key] = $levelsNumber;
}
$output = array();
$maxLevel = 1;
foreach ($links as $link => $levels){
    if ($levels > $maxLevel) $maxLevel = $levels;
}
for($level = 1; $level <= $maxLevel; $level++){
    foreach ($links as $link => $levels){
        $parts = explode('/', $link);
        if (count($parts) >= $level){
            $levelExists = false;

            if (!$levelExists){
                $keysString = '';
                for ($j = 0; $j < $level; $j++){
                    $keysString .= "['".$parts[$j]."']";
                }
                eval('$output'.$keysString.'= NULL;');
                $levelExists = true;
            }
        }
    }
}
print_r($output);
?>

运行它给出了

Array
(
    [bla.com] => Array
        (
            [bla1] => Array
                (
                    [bla2] => 
                    [bla3] => 
                )
            [blabla] => Array
                (
                    [bla1] => Array
                        (
                            [bla4] => 
                        )

                    [otherbla] => Array
                        (
                            [onemorebla] => 
                        )
                )
        )
)

我认为如果你玩它可能会得到你所期望的。