私の目標は、人 Xから始まり、すべての子孫を示す家系図を表示することです。兄弟、両親、または他の先祖を表示する必要はありません。
この目的のために、私はperson
クラスを持っています。
と列を持つデータベーステーブルもperson_ID
ありparent_ID
ます。
クラスが作成されたらperson
、目的の人物 ID を渡します。その後、そのテーブルから親 ID と子 ID がプリロードされます。
子孫ツリーを作成するために、person
クラス内に次のメソッドを記述しました。
public function loadChildren() {
foreach ($this->_ChildIDs as $curChildID) {
$child = new Person();
$child->loadSelfFromID($curChildID);
$child->loadChildren();
$this->_Children[] = $child;
}
}
これにより、子孫のツリー全体が再帰的に正常にロードされます。
ここまでは順調ですね。
このデータをネストされた HTML リストとして表示するために、次のスタンドアロン関数を作成しました。
function recursivePrint($array) {
echo '<ul>';
foreach ($array as $child) {
echo '<li>'.$child->getName();
recursivePrint($child->getChildren());
echo '</li>';
}
echo '</ul>';
}
最終的なスクリプトは次のようになります。
$c = new Person();
$c->loadSelfFromID('1');
$c->loadChildren(); // recursively loads all descendants
$descendants = $c->getChildren();
recursivePrint($descendants);
//Output is as expected.
私の質問はこれです:そのスタンドアロン機能をどこに貼り付けますか?
実際にはどこにも行かない機能のために、ランダムなユーティリティインクルードに放り込まれるだけですか?person
それはクラスに入る必要がありますか?FamilyTree
木を作るだけのクラスに入る必要がありますか?