2017-01-11 2 views
1

에 밀어 넣습니다. 재귀 적으로 모든 폴더를 읽고 다차원 배열에 삽입하는 스크립트를 만들려고합니다.디렉토리의 모든 폴더를 나열하고 배열

그래서 예제 경로를 만들어이 스크립트를 테스트합니다. 내 폴더 :

{ 
    "name": "1", 
    "pathTo": "TestFolder/1", 
    "children": [{ 
     "name": "11", 
     "pathTo": "TestFolder/11", 
     }, 
     { 
     "name": "12", 
     "pathTo": "TestFolder/12", 
     }, 
     { 
     "name": "13", 
     "pathTo": "TestFolder/13", 
     } 
    ] 
} 

내가 시도 :

$folders = array(); 

function listFolder($dir,$folders){ 
    $prov = array(); 
    $ffs = scandir($dir); 
    foreach($ffs as $ff){ 
     if($ff != '.' && $ff != '..'){ 
      $prov[] = $ff; 
      if(is_dir($dir.'/'.$ff)) { 
       $folders['children'] = listFolder($dir.'/'.$ff,$prov); 
      } 
     }  
    } 
    return $folders; 
} 

$arr = listFolder('TesteJSON',$folders); 
echo json_encode($arr); 

내가 어떻게 할 수 있습니다

TesteFolder

-1 
-11 
-12 
-13 

는 JSON 출력을 기대하는 내?

+0

분별 코드 들여 쓰기의 비트 코드는) 읽을 만들기 위해 먼 길을 간다와 b) ** 디버깅 ** – RiggsFolly

+0

또한, 귀하의 "구성 출력"는 실패 JSON 구문 검사. 당신은 정말로 당신의 결과물로 무엇을 원합니까? "11"은 "TesteFolder"의 하위 디렉토리 인 "1"의 하위 디렉토리입니까? 명확성을 위해,'find '의 결과를 보여줄 수 있습니까? -t type d -print'를 사용하고 JSON이 유효한지 확인하십시오. – ghoti

+0

}} 추가로, 내가 편집 할 것입니다. 예 "11"은 "1"의 하위 디렉토리이며 "TesteFolder"의 하위 디렉토리입니다. –

답변

1

재귀가 조금 엉망입니다. 이와 같이 각 재귀에서 배열을 반환 할 수 있습니다.

코드는 테스트되지 않았으며 단순한 "반환 값"재귀를 보여주기위한 것입니다. 또한 폴더에 대한 심볼릭 링크가 순환 참조를 유발할 수 있으므로 무한 재귀가 발생할 수 있지만 이는 현재 PHP 환경에 깊이 관여하지 않기 때문에 추측에 불과합니다. 이에

+0

작업을하지 못했습니다. 어린이를 얻지 못합니다/: –

+0

그게 나를위한 것입니다. 아이들과 아이들의 아이들을 얻습니다 ........ – RiggsFolly

+0

그것은 아이들을 얻지 만 더 많은 폴더를 가지고 있다면 잘 작동하지 않을 것입니다. 모든 폴더와 하위 폴더를위한 부모 폴더가 하나만있을 것입니다. –

0

필자의 의견 :

$folders = array(); 

function listFolder($dir,$folders){ 
    $prov = array(); 
    $ffs = scandir($dir); 
    $provv = array(); 

    if (empty($folders)){//parent folder 
     $folders['name'] = $dir; 
     $folders['pathTo'] = $dir; 
    } 
    foreach($ffs as $ff){ 
     if($ff != '.' && $ff != '..'){ 
      $prov['name'] = $ff; 
      $prov['pathTo'] = $dir.'/'.$ff; 
      $provv[] = $prov; 
      if(is_dir($dir.'/'.$ff)) { 
       $folders['children'] = listFolder($dir.'/'.$ff,$provv); 
      } 
     } 
    } 
    return $folders; 
} 

$arr = listFolder('test',$folders); 
echo json_encode($arr); 
+0

깊은 구조로 작업하지 않아도됩니다. – Dolfa

관련 문제