私はデータベース駆動型のナビゲーションを構築しています。私は自分のデータ構造を構築する方法で助けが必要です。私は非常に再帰を経験していませんが、これが最も可能性の高い方法です。データベーステーブルには、idカラム、parent_idカラム、およびlabelカラムがあります。このメソッドを呼び出した結果、私にデータ構造が提供されます。私のデータ構造が次のようになる方法:PHPネストされたナビゲーション
- parent_idが0のレコードはルート要素とみなされます。
- 各ルート要素は、ルート要素idと等しいparent_idを含む要素の配列を保持する子が存在する場合、子の配列を含みます。
- 子供には直接の子に等しいparent_idsを含む子配列が含まれている可能性があります(これは再帰的な点になります)
- parent_idが0ではないレコードが存在する場合、子の配列に追加されます要素。ここで
は、データ構造がどのように見えるかです:
$data = array(
'home' => array(
'id' => 1,
'parent_id' => 0,
'label' => 'Test',
'children' => array(
'immediatechild' => array(
'id' => 2,
'parent_id' => 1,
'label' => 'Test1',
'children' => array(
'grandchild' => array(
'id' => 3,
'parent_id' => 2,
'label' => 'Test12',
))
))
)
)。
ここで私はちょっと思いついたことがあります。それは正しいものではありませんが、私が使用したいものと、それを修正するのに役立ついくつかのIDがあります。
<?php
// should i pass records and parent_id? anything else?
function buildNav($data,$parent_id=0)
{
$finalData = array();
// if is array than loop
if(is_array($data)){
foreach($data as $record){
// not sure how/what to check here
if(isset($record['parent_id']) && ($record['parent_id'] !== $parent_id){
// what should i pass into the recursive call?
$finalData['children'][$record['label'][] = buildNav($record,$record['parent_id']);
}
}
} else {
$finalData[] = array(
'id' => $data['id'],
'parent_id' => $parent_id,
'label' => $data['label'],
)
}
return $finalData
}
ありがとうございました!
あなたの質問は何ですか? – hakre
MySQLをデータストアとして使用している場合は、次のようなものがあります。DBの側には、 – Treffynnon
FIxedのhttp://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/があります。私は、ナビゲーションデータ構造を構築するPHPコードを探しています – jkushner