隣接ツリー モデル (id、parent_id) の MySQL データベースから PHP の目次を数値化/作成または生成しようとしています。これまでのところ、出力をエコーするときにこれが達成されました。
1. Category 1
1 Subcategory 1
2 Subcategory 2
3 Subcategory 3
2. Category 2
1. Subcategory 1
1. Subcategory Subcategory 1
2. Subcategory Subcategory 2
2 Subcategory 2
1 Subcategory 1
2 Subcategory 2
私は非常に近いですが、私が望む出力は次のとおりです。
1. Category 1
1.1 Subcategory 1
1.2 Subcategory 2
1.3 Subcategory 3
2. Category 2
2.1. Subcategory 1
2.1.1. Subcategory Subcategory 1
2.1.2. Subcategory Subcategory 2
2.2 Subcategory 2
2.2.1 Subcategory 1
2.2.2 Subcategory 2
つまり、Chapter.Subchapter.Subchapter.Subchapter TITLE のように、目次形式を多階層構造で使用したいと考えています。
現在のインデックスを保持し、前のインデックスに連結する再帰配列を使用してみましたが、各項目の前に奇妙な長い番号を追加することになります。
0.11。2 ..11.2.3.4.5.6. 7 ..11..11.2.3.4.5. 6台のコンピューター、
代わりに、次のようにする必要があります。
2.7.6 コンピュータ。
(その他の数字はその他の項目の数字です)
これは私が取り組んできたコードです
renumber(0,0,1,0);
function renumber($parent_id,$level=0,$counter=1) {
// Counter level keeps track of the current index number
$counterlevel[$level]=$counter;
$query = "SELECT defaultTitle, id, pid FROM defaultChapters WHERE pid=".$parent_id;
$res = mysql_query($query) or die(mysql_error());
// Exit if there are no tree leafs
if(mysql_num_rows($res) == 0) {return;}
while (list ($title, $id) = mysql_fetch_row($res))
{
$leveltext[$level][$counterlevel[$level]] = $section.".".$counterlevel[$level];
echo str_repeat("......",$level)." ".$counterlevel[$level]." ".$section." ".$title."<BR>";
// Increase the counter of the current level
$counterlevel[$level]++;
// Initialize the level counter
if(!$counterlevel[$level+1]) {
$counterlevel[$level+1] = 1;
}
// Start the function again to find children
renumber($id,$level+1,$counterlevel[$level+1]);
} // End While
}
これを含むすべてのテクニカル サポート フォーラムを参照しましたが、これに対するアルゴリズムを公開した人は誰もいないようです。単純に、このアルゴリズムのサンプル コードがどこにもありません。番号を付けずにmysqlデータベースからphpの階層ツリーを取得するためのチュートリアルとコードは何百もありますが、phpで階層的な目次を数えることについては何もありません。
SQLクエリでもそれを行うことは可能ですか?