2014-10-12 28 views
0

任何人都可以告訴我爲什麼$ output數組始終只是foreachloop的最後一個$ tmp數組。數組合並將不會在foreach中工作php

IM拉頭髮這裏..

private function create_dir_array($dirs) { 
    $output = array(); 
    foreach ($dirs as $key => $path) { 
     $path = split('/',$path); 
     $tmp = array(); 
     $counter = count($path)-1; 
     for($i = $counter; $i >= 0; $i--) 
     { 
      $tmp = array($path[$i] => $tmp); 
     } 
     $output = array_merge($output, $tmp); 
    } 
    print("<pre>".print_r($output,true)."</pre>"); 

} 

,如果有這樣的陣列

Array 
(
    [0] => archive/folder1 
    [1] => archive/folder1/subfolder1 
    [2] => archive/folder2 
    ..... 
) 

,我想這個數組出給定數據的 可能任何人有這更好更簡單的想法?

Array 
(
    [archive] => Array(
     [folder1] => Array(
      [subfolder1] => Array() 
      ) 
     ) 
     [folder2] => Array(
     ...... 
) 
+1

可能是因爲你想在內部循環中使用'$ tmp [] = array($ path [$ i] => $ tmp);'。 – 2014-10-12 00:57:30

回答

1

因爲你重寫它在你的循環來實現:

for($i = $counter; $i >= 0; $i--) 
{ 
    $tmp = array($path[$i] => $tmp); 
} 
+0

我在這裏被蒙上眼睛;)謝謝 – ceed 2014-10-12 01:07:23

+0

雖然我不得不說我真的不知道它在做什麼,但是你把'$ tmp'包含到另一個數組中並且分配它,我想你一定會得到一個相當大的數組爲長路徑。 – 2014-10-12 01:09:33

+0

可能有一個更簡單的方法..我有一個數組,它擁有我的根目錄中的完整路徑名。我想要一個具有第一級別的數組作爲鍵和數組,其中的鍵是子目錄等我可以編輯問題,以顯示我的意思 – ceed 2014-10-12 01:21:48

0

那麼它工作得很好,是我使用array_merge_recursive。 現在對我來說完全合乎邏輯。

其實還不算很多代碼。