わかりました、これは奇妙な質問のように聞こえるかもしれませんので、最初に基本的な状況を説明しましょう:
弊社ではチケット制を採用しております。このシステムには FAQ データベースがあります。データベースの構造を変更することはできません。その変更に対処するにはチケット システムを変更する必要があり、それはオプションではないからです。
それはさておき...
利用可能な個別のフィールドがないため、すべての項目のタイトルに章番号を追加して、一種の索引を作成します。
したがって、次のようなものが得られます。
1 start
1.1 some subchapter
2 new chapter
3 another chapter
3.1 sub of chapter
3.1.1 sub sub chapter
等..
もちろん、気の利いた正規表現を使用すると、文字列から章の部分を簡単に追加できます。しかし、次のステップは、親章に基づいて対応するサブチャプターを簡単に見つけられるようにすることです。データベースなしでこれを検索可能にする最も簡単な方法は、多次元配列ですよね?
したがって、次のようになります。
array( 3 => array(
'item' => 'data', 1 => array('item', 2 = array() ) ) ) etc...
私が今行ったことは、チャプターインデックスの配列を作成することです( 3.1.1 の場合は [3,1,1] )。この配列には常に1〜3個のアイテムがあることがわかっているため、切り替えを行いました配列の長さに基づいて、これを行いました:
$array[$index[0]][$index[1]]['item'] = $content;
しかし、これは非常に汚くて柔軟性のない方法だと思います。通常、私は何があってもデータベース構造を変更することに投票しますが、そのオプションがなければ、最善の方法が何であるかはわかりません.
どんな助けでも素晴らしいでしょう!
編集:読みやすくするために、以下に私のコメントを追加しました
タイトルは確かに1行ですが、その部分は正規表現を使用して章の部分を抽出しています。それでうまくいきます。
私が基本的に作成するのは、インデックスの配列を使用して各章または章部分のチェックボックスのリストを作成するフォームです。しかし、配列を検索してキーを比較してサブチャプターを見つけたくはありません。したがって、3.1 を選択する場合は、3.1.1、3.1.2 をチェックします。キーは 3.1 で始まるため、それを印刷する必要があります。
これを行うことができる方が速いでしょう:
3.1.1 を選択 => $chapters[3][1][1]['item'] を返す
しかし、それは、その形式で初期配列を構築できる場合にのみ可能です。