2014-07-26 5 views
0

어떻게 여러 개의 작은 배열을 단일 다차원 배열로 변환 할 수 있습니까?여러 배열을 단일 다차원 배열로 변환하는 방법

나는이 같은 작은 배열을 포함하는 주요 빅 어레이를 가지고있다.

Array 
(
[0] => Array 
    (
    [length] => 1073709056 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_02_3.VOB 
     ) 

    ) 

[1] => Array 
    (
    [length] => 1073709056 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_02_1.VOB 
     ) 

    ) 

[2] => Array 
    (
    [length] => 1073709056 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_02_4.VOB 
     ) 

    ) 

[3] => Array 
    (
    [length] => 1073709056 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_02_2.VOB 
     ) 

    ) 

[4] => Array 
    (
    [length] => 295792640 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_02_5.VOB 
     ) 

    ) 

[5] => Array 
    (
    [length] => 39620608 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_01_1.VOB 
     ) 

    ) 

[6] => Array 
    (
    [length] => 274893 
    [path] => Array 
     (
      [0] => Cover & Label 
      [1] => This Is 40 (2012) label.jpg 
     ) 

    ) 

[7] => Array 
    (
    [length] => 197602 
    [path] => Array 
     (
      [0] => Cover & Label 
      [1] => This Is 40 (2012) cover.jpg 
     ) 

    ) 

[8] => Array 
    (
    [length] => 88064 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_02_0.BUP 
     ) 

    ) 

[9] => Array 
    (
    [length] => 88064 
    [path] => Array 
     (
      [0] => VIDEO TS 
      [1] => VTS_02_0.IFO 
     ) 

    ) 

[10] => Array 
    (
    [length] => 64109 
    [path] => Array 
     (
      [0] => INFO TBS 
      [1] => silver torrent logo.jpg 
     ) 

    ) 
) 

[길이]는 파일 크기입니다.

[경로]는 파일 경로입니다.

[경로] 내의 요소가 1보다 큰 경우 마지막 요소를 제외한 모든 요소가 상위 디렉토리 순서이며 마지막 요소는 파일 이름입니다. 이

Array 
     (
     [length] => 64109 
     [path] => Array 
      (
       [0] => directory 
       [1] => sub-directory 
       [2] => silver torrent logo.jpg 
      ) 

     ) 

같은 어떻게 배열을 다음에 배열 위에 변환 할 수 있습니다. 코드는 멀티 레벨 깊은 배열의 한 단계 깊은 배열 작동하지만 위의

Array 
(
    [directory1] Array(
         [file1.jpg] => 197602 
         [file2.jpg] => 274893 
         ) 

    [directory2]Array(
         [file1.txt] => 41 
         [file2.txt] => 41 
         [sub-directory1]Array(
               [file1.txt] => 41 
               [file2.txt] => 44 
               [file3.txt] => 54 
               ) 

        ) 
    [file1.txt] => 41 
    [file2.txt] => 47 
) 

지금까지 나는이

foreach($old_files as $x) 
    { 

     if (isset($x['path'][1])){ 
    //$path=$x['path'][0]; 
    $path = @iconv('utf-8', 'utf-8//ignore', $x['path'][0]); 
    $path1 = @iconv('utf-8', 'utf-8//ignore', $x['path'][1]); 
    $files[$path][$path1] = $x['length']; 

     }else{ 
    $path = @iconv('utf-8', 'utf-8//ignore', $x['path'][0]); 
    $files[$path] = $x['length']; 
     } 
    } 

같이 했어요.

어떻게 해결할 수 있습니까?

+0

어떤 디렉토리에있는 디렉토리에있는 파일에 대한? 이것이 가능한가? 그리고 asd 디렉토리 및 dirsctory asd/asd/asd/asd/asd.jpg 디렉토리는 어떻습니까? 차이점은 무엇입니까? –

+0

예, 디렉토리에도 디렉토리가 있습니다. 우리는 배열 요소의 수를 사용하여 그것들을 달리 할 수있다. 마지막 요소는 filename이다. – AMB

+0

일부 디렉토리의 이름이 같을 수 있습니까? 그렇다면 부모 디렉토리가 무엇인지 알 수 없습니다. – Fabricator

답변

2

우리는 내부 배열은 우리가 같이 작업하는 추적 할 변수를 사용할 수 있습니다

$output = array(); 
foreach ($arr as $v) { 
    $pointer = &$output; 
    $path = $v['path']; 
    for ($i = 0; $i < count($path)-1; $i++) { 
     $dir = $path[$i]; 
     if (!array_key_exists($dir, $pointer)) { 
      $pointer[$dir] = array(); 
     } 

     $pointer = &$pointer[$dir]; 
    } 

    $file = $path[count($path)-1]; 
    $pointer[$file] = $v['length']; 
} 
+0

그 완벽한, 감사합니다 lot.i foreach 루프 내부의 개수를 확인하는 경우 사용하지만, 당신이 더 적합합니다. – AMB

관련 문제