2013-05-08 52 views
0

我正在迭代文件夾並以某種方式格式化其內容。從特定格式的字符串構建數組層次結構

我已經形成從這組字符串數組:

home--lists--country--create_a_country.jpg 

home--lists--country--list_countries.jpg 

profile--edit--account.jpg 

profile--my_account.jpg 

shop--orders--list_orders.jpg 

的陣列需要看起來像這樣:

<?php 
array(
    'home' => array(
    'lists' => array(
     'country' => array(
      'create_a_country.jpg', 
      'list_countries.jpg' 
     ) 
    ) 
    ), 
    'profile' => array(
    'edit' => array(
     'account.jpg' 
    ), 
    'my_account.jpg' 
    ), 
    'shop' => array(
    'orders' => array(
     'list_orders.jpg', 
    ) 
); 

的事情是,該陣列的深度可取決於文件名有多少個「 - 」分隔符。下面是我試了一下(假設每個字符串從陣列中來:?

$master_array = array(); 
    foreach($files as $file) 
    { 
     // Get the extension 
     $file_bits  = explode(".", $file); 
     $file_ext  = strtolower(array_pop($file_bits)); 
     $file_name_long = implode(".", $file_bits); 

     // Divide the filename by '--' 
     $file_name_bits = explode("--", $file_name_long); 

     // Set the file name 
     $file_name  = array_pop($file_name_bits).".".$file_ext; 

     // Grab the depth and the folder name 
     foreach($file_name_bits as $depth => $folder) 
     { 
      // Create sub-arrays as the folder structure goes down with the depth 
      // If the sub-array already exists, don't recreate it 
      // Place $file_name in the lowest sub-array 

      // .. I'm lost 
     }    
    } 

任何人都可以闡明我怎麼可能會做一些這方面的光所有Insight讚賞

w001y

+0

任何你所關心的文件前的原因張力?因爲你的代碼似乎並沒有真正使用它。 – Passerby 2013-05-08 05:25:34

+0

完全不關心文件擴展名,只是上面的一個例子。 – w001y 2013-05-08 05:52:13

回答

2

試試這個:

$files=array("home--lists--country--create_a_country.jpg","home--lists--country--list_countries.jpg","profile--edit--account.jpg","profile--my_account.jpg","shop--orders--list_orders.jpg"); 
$master_array=array(); 
foreach($files as $file) 
{ 
    $file=explode("--",$file); 
    $cache=end($file); 
    while($level=prev($file)) 
    { 
     $cache=array($level=>$cache); 
    } 
    $master_array=array_merge_recursive($master_array,$cache); 
} 
print_r($master_array); 

Live demo

+0

偉大的答案 - 理清我想做得完美的東西。謝謝路人,很好的幫助! – w001y 2013-05-08 06:07:19

+0

嘿路人,我已經做了一些玩,並意識到我需要傳遞原來的文件名(全字符串)與新形成的文件名 - 以便新的文件名可以引用舊的文件位置。你能想出一個辦法來做到這一點?例如create_a_country.jpg需要引用home - lists - country - create_a_country.jpg ..感謝您的幫助,至此爲止:) – w001y 2013-05-09 01:32:38

+0

@ w001y我不太明白。你可以引用一些東西給變量,但是你不能引用「某個數組中的東西的位置」,所以如果你想將target.jgp指向'path - to - target.jpg',所有你需要的是一個一級數組('「target.jpg」=>「path - to - target.jpg」)。 – Passerby 2013-05-09 03:11:40