2011-09-09 47 views
-5

我這樣做代碼:
的index.php:陣列爲文件夾

$series = array(
    "a" => array(
     "b" => array(
      "FOLD", "more_arrays.php" 
     ), 
     "b2" => array(
     ) 
    ) 
); 

function pre($a) { print "<pre>"; print_r($a); print "</pre>"; } 
$string = "a,,,b"; 

$all_directions = explode(",,,", $string); 
$all_directions = array_map("trim", $all_directions); 

$b = ""; $g = 0; 
foreach($all_directions as $v) 
{ 
    $b .= "['".str_replace(array("[", "]", "'", "\""), null, $v)."']"; 
    $g++; 
} 

@eval('$where = $series'.$b.';'); 

if(isset($where[0]) && $where[0] == "FOLD") 
{ 
    // a[series], b[series], c[new_array] 
    require_once("./more_folders/".$where[1]); 

    print $g; 
} 

for($i = 0; $i <= sizeof($where); $i++) 
{ 
} 

pre($where); 

more_array.php:

$series_in = array(
    "c" => array(
     "d" => array(
      "bla" => array(), 
      "hey" => array(), 
      "ha" => array() 
     ), 
     "d2" => array(

     ) 
    ), 
    "c2" => array(
    ) 
) 

在$字符串,我定義這 「文件夾」 我要見例如,如果我寫$string = "a";它會顯示「a」中的所有數組。

鍵=的文件夾的名稱,值=該文件夾和那些陣列內的子文件夾。

現在:因爲這將是一個巨大的數組,我想單獨給很多陣列。 如果你的代碼,$series[a][b]直接引到另一個陣列看到。

現在,如果我這樣做$string = "a,,,b";我希望看到:「C」和「C2」
,如果我做$string = "a,,,b,,,c";我希望看到:「d」,「D2」
,如果我做$string = "a,,,b,,,c,,,d";我想看到裏面所有d( 「BLA」, 「嘿」, 「哈」 ..)

我怎樣才能做到這一點?

+0

bleeee。 @eval('$ where = $ series'。$ b。';'); – genesis

+0

請澄清你的問題(如果有的話)。 –

+0

我想要這樣做,當我寫$ string =「a ,, b ,, c」;它將研究$ series_in – Daniel

回答

0

我會咬...

你似乎有大部分的零件。基本上你需要把它們放在一個循環中。

您已經$string$series。然後你把$string分成你的$all_directions。循環到$all_directions,每次向下進入陣列$series = $series[$all_directions[$i]];當您完成最後一個$all_directions返回$series(但請注意用完$series,返回null,否則返回false,如果您確定這將是錯誤)。

唯一的其他東西是任何時候$series[$all_directions[$i]]是特殊的「摺疊」條目,則第一次加載該文件,併爲它分配在即時像 include ...; $series[$all_directions[$i]] = $series_in;

你不希望也不需要eval()和循環更好使用for,因爲你需要檢查密鑰"FOLD"(我也說使用遞歸函數,但你說數組可能會非常大,所以它可能會傷害性能)。

相關問題