2014-10-12 4 views
0

может кто-нибудь сказать мне, почему массив $ output всегда является только последним массивом $ tmp foreachloop.array merge wont work in foreach php

-им вытягивать волосы здесь ..

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);' в вашем внутреннем цикле. –

ответ

1

Потому что вы переопределить его на каждой итерации в цикле:

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

я получил с завязанными глазами здесь;) спасибо – ceed

+0

Хотя я должен сказать, что я действительно не понимаю, что он делает, вы включаете этот '$ tmp' в другой массив и назначаете его, я бы предположил, что вы должны получать довольно огромные массив для длинных путей. –

+0

может быть проще. У меня есть массив, в котором есть полные имена путей из моего корневого каталога. И я хочу массив, который имеет первый уровень как ключ и массив внутри него, где ключи являются подкаталогами и т. Д. Я могу отредактировать вопрос, чтобы показать, что я имею в виду – ceed

0

Ну это прекрасно работает, я использовать array_merge_recursive. Что сейчас для меня совершенно логично.

все еще его чертовски код на самом деле не так много.