https://github.com/blt04/doctrine2-nestedsetを使用して階層データを管理しています。
次のデータベース構造で階層を管理します。
categories
-id
-root
-lft
-rgt
-name
以下のように、ノードをliタグでラップする必要があります。
Vehicles
Bikes
Pulsor
Hero Honda
Automobiles
Trucks
このバンドルには、ノードを操作するための次のメソッドが用意されています。
$tree=fetchTreeAsArray($nodeId); //fetches tree for that node
$node->getNumberDescendants(); //returns all descendants for that node
メソッドの詳細については、https://github.com/cbsi/doctrine2-nestedset/blob/master/README.markdownをご覧ください。
liタグの周りにノードをラップしたい:
私はこれまでこれを試しました:
$tree = $nsm->fetchTreeAsArray(8);
$treeLiTags="<ul>";
foreach ($tree as $node) {
$treeLiTags.="<li>".$node;
if ($node->hasChildren()) {
echo $node->getNumberDescendants();
$treeLiTags.="<ul>";
$closeParent=true;
}
else {
if ($closeParent && !$node->hasNextSibling()) {
$closeParent=false;
$treeLiTags.="</ul>";
}
$treeLiTags.="</li>";
}
}
$treeLiTags.="</ul>";
echo $treeLiTags;
これは次のように戻ります。
Vehicles
Bikes
Pulsor
Hero Honda
250 cc
Automobiles
Trucks
私は得るべきです:
Vehicles
Bikes
Pulsor
Hero Honda
250 cc
Automobiles
Trucks
どんなアルゴリズムが役に立ちますか?