鍍金池/ 問(wèn)答/PHP/ 站點(diǎn)樹(shù)問(wèn)題,此站點(diǎn)樹(shù)沒(méi)有pid該如何做?

站點(diǎn)樹(shù)問(wèn)題,此站點(diǎn)樹(shù)沒(méi)有pid該如何做?

此站點(diǎn)樹(shù)為表中的url字段,如何將數(shù)據(jù)處理成效果圖的樣子。切分我已經(jīng)處理好了,希望回答者幫忙提供下代碼,而不是思路。思路我有拼數(shù)據(jù),拼不好。
期望效果:
圖片描述

我試過(guò)的思路1是:去掉數(shù)組中重復(fù)的值,但是去掉重復(fù)值之后,怎么知道他的上一級(jí)是誰(shuí)呢?這個(gè)方案pass掉
我試過(guò)的思路2是:找數(shù)組中相同的值,合并成一個(gè)新數(shù)組
思路2的:代碼如下
圖片描述
圖片描述
圖片描述
現(xiàn)在的情況:有1條記錄沒(méi)有顯示出來(lái),可能是數(shù)據(jù)覆蓋,但是我打印完了,沒(méi)查出來(lái)問(wèn)題出在哪個(gè)層級(jí),不知道怎么處理?或者您有更好的方法也希望提點(diǎn)我下。
圖片描述

回答
編輯回答
痞性

搞好了,大家有需要的可以測(cè)試下

$urlArr = array(

'https://172.16.3.33/resource/js/jquery.min.js',  
'https://172.16.3.33/resource/js/unit.js',  
'https://172.16.3.33/resource/js/dialog/jquery.artDialog.source.js',  
'https://172.16.3.33/test.js',  
'https://172.16.3.13/resource/xigua/hello.php',  

);

$urlTree = arrangeUrlTree($urlArr); //拼接數(shù)據(jù)
echo "<pre>";
print_r($urlTree);

/**

  • 整理url數(shù)組 為 url樹(shù)結(jié)構(gòu)
  • @param $arr 一維數(shù)組
  • @return array
  • @author xg

*/
function arrangeUrlTree($arr){

if(!$arr){
    return array();
}
$returnArr = array();
foreach($arr as $k => $v){
    $url = parse_url($v);//分析URL
    //print_r($url);
    $hostname = $url['scheme'].'://'.$url['host'];
    if(!isset($returnArr[$hostname])){
        $returnArr[$hostname] = array();
    }

    $pathList = explode('/',$url['path']);
    $pathList = array_filter($pathList);//去空
    $pathList = array_merge($pathList);//重新排序下標(biāo)
    $pathListCount = count($pathList);//長(zhǎng)度
    $tmpArr = &$returnArr[$hostname];//引用賦值,更新最終數(shù)組的值
    $treeLevel = 1;//樹(shù)的深度  為遍歷展示用
    foreach($pathList as $k2 => $v2){

        if($k2 == ($pathListCount-1) ) {//最后一層 則說(shuō)明是文件  否則為文件夾路徑
            $tmpArr[] = $v2;
            //$tmpArr['treeLevel'] = $treeLevel;    //等級(jí)
        }else{
            if(!isset($tmpArr[$v2])){
                $tmpArr[$v2] = array();
            }
            //$tmpArr['treeLevel'] = $treeLevel;
            $tmpArr = &$tmpArr[$v2];//重新賦值數(shù)組 用于循環(huán)整理完完整目錄
        }
        $treeLevel += 1;
    }

}

return $returnArr;

}

2017年12月19日 08:53