私は深さの制限がないようにいくつかのナビゲーション関連の機能を持っています。これらは、CSSメニュー、ブレッドクラムトレイルなどを生成します。適切に再帰
明示的なループを行わずに深度またはルートへの各パスをどのように機能させるかについて、私は困惑しています。
次の例は、ページの最上位の親が必要な典型的な例です。最上位のフィールドは、parent
フィールドにゼロの値を持ちます。
function topPg() {
$p = $this->retrieve("id = '$this->parent'");
if ($p->parent != 0) {
$gp = $this->retrieve("id = '$p->parent'");
if ($gp->parent != 0) {
$ggp = $this->retrieve("id = '$gp->parent'");
if ($ggp->parent != 0) {
$gggp = $this->retrieve("id = '$ggp->parent'");
// ad naseum
} else {
return $ggp;
}
} else {
return $gp;
}
} else {
return $p;
}
} // func
誰もが道を指し示すのに役立つアドバイスや類似したコードやtuteリンクを持っている:ここでは
は、明示的にループされたバージョンですか?
をあなたは$ nodeと$ thisを逆にしました(つまり、$ this-> retrieve( "id = '$ node-> parent'")ですが、そのアイデアは明白です) – Stephan202
@ Stephan202:ありがとうございます私は答えを修正しました – Welbog
は最初に$ node = $ thisではありませんか? – Petrunov