Propel の NestedSet 機能を使用しようとしています。ただし、ツリーが作成されたときにバランスが取れているように挿入することについて何かが欠けています(つまり、水平に塗りつぶします)。
次の要素があるとします。
root
r1c1 r1c2
r2c1 r2c2
r2c3 を r1c2 の最初の子として挿入したい (つまり、行 3 から開始する前に行 2 を埋める)。
これに対する私の最初の試みは、この関数を作成することでした:
function where(User $root,$depth=0)
{
$num = $root->getNumberOfDescendants();
if ( $num < 2 )
return $root;
foreach($root->getChildren() as $d)
{
if ( $d->getNumberOfChildren() < 2 )
{
return $d;
}
}
foreach($root->getChildren() as $d)
{
return where($d, $depth+1);
}
}
ただし、これにより、必要に応じて r1c2 ではなく、r2c1 に子が挿入されます。
どういうわけか、次の利用可能な場所でエントリをツリーに挿入する方法はありますか?
ティア・マイク