Web サイトのメニュー システムを保持する配列を作成しました。
$menu = array(
'Page_1' => array(
'display' => 'Page 1'
),
'Page_2' => array(
'display' => 'Page 2',
'sub' => array(
'Sub_Page_1' => array(
'display' => 'Sub Page 1'
)
)
),
'Page_3' => array(
'display' => 'Page 3',
'sub' => array(
'Sub_Page_2' => array(
'display' => 'Sub Page 2'
),
'Sub_Page_3' => array(
'display' => 'Sub Page 3'
)
)
)
);
次の関数を使用して、メニュー システムを解析し、ネストされた順序なしリストとして出力しています。
function Build_Menu($menu_array,$is_sub){
$attr = (!$is_sub) ? ' class="menu"' : ' class="submenu"';
$menu = "<ul$attr>";
foreach($menu_array as $id => $properties){
foreach($properties as $key => $val){
if(is_array($val)){
$sub = Build_Menu($val,TRUE);
}
else{
$sub = NULL;
$$key = $val;
}
}
$menu .= '<li><a href="#">'.$display.'</a>'.$sub.'</li>';
unset($url, $display, $sub);
}
return $menu . "</ul>";
}
これはうまく機能し、次のようなリストが生成されます。
Page 1
Page 2
Sub Page 1
Page 3
Sub Page 2
Sub Page 3
私が立ち往生しているのは、親ページを渡してその親の子ページを返すことができるように、関数を変更しようとしていることです。
何かのようなもの:
function Build_Menu($menu_array,$is_sub,'Page 2'){ ... }
次の出力が生成されます。
Page 2
Sub Page 1
また
function Build_Menu($menu_array,$is_sub,'Page 3'){ ... }
これは以下を生成します:
Page 3
Sub Page 2
Sub Page 3
重要なことは、サブレベルがいくつあっても関数の一部として出力されるように、関数が再帰的なままであることです。計画では、各ページの「表示」値が一意の識別子になります。
私はこれで何時間もぐるぐる回っているので、どんな助けでも大歓迎です!
どうもありがとう、ジェームズ。