誰?
事前に感謝します。追加情報が必要な場合はお知らせください。
多次元配列を複数のネストされた HTML ナビゲーション メニューに変換しようとしています。SO: solution hereに関する別の回答から、その要点を理解しました。
私が理解しようとしているのは、次の子配列の URL で最上位の親リンク (および後続の子ページ リンク) を保持する方法です。配列を構築するために関数自体を呼び出すときに関数へのリンクを渡そうとしましたが、それは最新の親リンクのみを保持していました。
例:
ホーム 概要
-情報 --
サブページ
になります:
ホームについて/情報について/情報/サブページについて
サンプル配列は次のとおりです。
Array
(
[0] => stdClass Object
(
[id] => 12
[parent] => 11
[name] => Sub Page
[link] => sub_page
[target] => _self
)
[1] => stdClass Object
(
[id] => 14
[parent] => 12
[name] => Test
[link] => test_test
[target] => _self
)
[2] => stdClass Object
(
[id] => 9
[parent] => 0
[name] => Home
[link] => home
[target] => _self
)
[3] => stdClass Object
(
[id] => 11
[parent] => 10
[name] => Info
[link] => info
[target] => _self
)
[4] => stdClass Object
(
[id] => 13
[parent] => 10
[name] => Test
[link] => test
[target] => _self
)
[5] => stdClass Object
(
[id] => 10
[parent] => 0
[name] => About
[link] => about
[target] => _self
)
)
そして、ここに私が使用しているコードがあります:
function create_menu_array($arr, $parent = 0){
$pages = array();
foreach($arr as $page){
if($page->parent == $parent){
$page->sub = isset($page->sub) ? $page->sub : $this->create_menu_array($arr, $page->id);
$pages[] = $page;
}
}
return $pages;
}
function create_menu_html($nav){
$html = '';
foreach($nav as $page){
$html .= '<ul><li>';
$html .= '<a href="' . base_url().$page->link . '" target="'.$page->target.'">' . $page->name . '</a>';
$html .= $this->create_menu_html($page->sub);
$html .= '</li></ul>';
}
return $html;
}