まず第一に、このプラットフォームを提供してくれたstackoverflowと、初心者を助けてくれたあなたに感謝します;-)
今..私は2つのテーブルを持っています:ページとセクションそれぞれが独自のIDを持っています。ページには 1 つ以上のセクションがあります。セクションはちょうど 1 ページに属します。両方の ID のリスト シーケンスは、別のフィールドで処理されます。
両方のテーブルを読み取り、(ソートされていない) 配列を作成します。最後に必要なのは、以下に示すように、page_id と section_id が正しい順序で並べられたリストです。
データを取得した後の私の tarray の例を次に示します。
myArr[] = array( page_id=>2, section_id=>2, parent_id=>0, level=>0, page_seq=>1, section_seq=>2, page_title=>p1 );
myArr[] = array( page_id=>2, section_id=>9, parent_id=>0, level=>0, page_seq=>1, section_seq=>1, page_title=>p1 );
myArr[] = array( page_id=>3, section_id=>3, parent_id=>0, level=>0, page_seq=>2, section_seq=>1, page_title=>p2 );
myArr[] = array( page_id=>4, section_id=>4, parent_id=>0, level=>0, page_seq=>3, section_seq=>1, page_title=>p3 );
myArr[] = array( page_id=>5, section_id=>5, parent_id=>3, level=>1, page_seq=>3, section_seq=>1, page_title=>p2-3 );
myArr[] = array( page_id=>6, section_id=>6, parent_id=>3, level=>1, page_seq=>2, section_seq=>1, page_title=>p2-2 );
myArr[] = array( page_id=>7, section_id=>7, parent_id=>4, level=>1, page_seq=>1, section_seq=>1, page_title=>p3-1 );
myArr[] = array( page_id=>8, section_id=>8, parent_id=>7, level=>2, page_seq=>1, section_seq=>1, page_title=>p3-1-1 );
myArr[] = array( page_id=>9, section_id=>10, parent_id=>5, level=>2, page_seq=>1, section_seq=>1, page_title=>p2-1-1 );
myArr[] = array( page_id=>9, section_id=>11, parent_id=>5, level=>2, page_seq=>1, section_seq=>2, page_title=>p2-1-1 );
myArr[] = array( page_id=>10, section_id=>12, parent_id=>3, level=>1, page_seq=>1, section_seq=>1, page_title=>p2-1 );
私の問題はソートです。
- section_seq は、ページ内のセクションのシーケンスです。
- page_seq は、同じ親のレベル内のページのシーケンスです。
ここで再帰ループの例をいくつか見つけましたが、正直なところ、それらを自分のニーズに適応させることはできません。そして、再帰ループが必要ですか?
すべてのページで一意であるため、配列のキーは section_id である必要がありますか? 正しい並べ替えを行うには?
注意: ページ タイトルは、残念ながら、上記の例のように、並べ替えの目的で使用することはできません ;-) 自由なテキストであるため...
だから私が必要なのは:
- レベル 0 および page_seq = 1 で最初のページ (1) を読み取る
- レベル 1 の最初のページ (2) を読み取り (存在する場合)、ページ (1) を親として、page_seq = 1
- レベル 2 を持つ最初のページ (3) を読み取り (存在する場合)、ページ (2) を親として、page_seq = 1
- ... より深いレベルが存在しない限り続行します
- レベル 2 (存在する場合) を持つ 2 番目のページ (4) を読み取り、ページ (2) を親として、page_seq = 1
- ... より深いレベルが存在せず、このレベルにページ (2) を親として持つページがなくなるまで続行します
- レベル 1 の 2 番目のページ (5) を読み取り (存在する場合)、ページ (1) を親として、page_seq = 1
- ... より深いレベルが存在せず、このレベルにページ (5) を親として持つページがない限り続行します
- レベル 0 および page_seq = 2 で 2 番目のページ (6) を読み取る
- 等々。
強力なヘルプとアイデアはありますか?
前もってありがとうヴォルフガング