好的,这听起来可能是一个奇怪的问题,所以首先让我列出基本情况:
在我们公司,我们正在使用票务系统。这个系统有一个常见问题数据库。我无法以任何方式更改数据库的结构,因为我们必须更改票务系统以应对这种变化,而这不是一个选择。
因此,除此之外......
因为没有可用的单独字段,我们在每个项目的标题中添加一个章节号以具有某种索引。
所以你会得到这样的东西:
1 start
1.1 some subchapter
2 new chapter
3 another chapter
3.1 sub of chapter
3.1.1 sub sub chapter
ETC..
使用漂亮的正则表达式可以很容易地从字符串中提取章节部分。但下一步将是根据父章节轻松找到相应的子章节。在没有数据库的情况下使其可搜索的最简单方法是多维数组,对吗?
所以你会得到这个:
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;
但我觉得这是一种非常肮脏和不灵活的方式。通常,无论如何我都会投票支持更改数据库结构,但是如果没有该选项,我不确定最好的方法是什么。
任何帮助都会很棒!
编辑:在下面添加了我的评论以提高可读性
标题确实是一行,但那部分我使用正则表达式来提取章节部分。所以这行得通。
我基本上构建的是一个表单,它使用索引数组为每个章节或章节部分构建一个复选框列表。但我不想搜索数组并比较键来查找子章节。因此,如果我选择 3.1,我会检查 3.1.1、3.1.2,因为密钥以 3.1 开头,所以我知道要打印它。
更快的是能够做到这一点:
选择 3.1.1 => 返回 $chapters[3][1][1]['item']
但这只有在我可以以这种形式构建初始数组时才有可能。