【发布时间】:2012-08-15 18:42:17
【问题描述】:
好的,这听起来可能是个奇怪的问题,所以首先让我列出基本情况:
在我们公司,我们正在使用票务系统。这个系统有一个常见问题数据库。我无法以任何方式更改数据库的结构,因为我们必须更改票务系统以应对这种变化,而这不是一个选择。
所以,不碍事...
因为没有可用的单独字段,所以我们在每个项目的标题中添加一个章节号以具有某种索引。
所以你会得到这样的东西:
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;
但我觉得这是一种非常肮脏和不灵活的方式。通常,无论如何我都会投票支持更改数据库结构,但是如果没有该选项,我不确定最好的方法是什么。
任何帮助都会很棒!
编辑:在下面添加我的评论以提高可读性
标题确实是一行,但那部分我使用正则表达式来提取章节部分。所以这行得通。
我基本上构建的是一个表单,它使用索引数组为每个章节或章节部分构建一个复选框列表。但我不想搜索数组并比较键来查找子章节。因此,如果我选择 3.1,我会检查 3.1.1、3.1.2,因为密钥以 3.1 开头,所以我知道要打印它。
更快的是能够做到这一点:
选择 3.1.1 => 返回 $chapters[3][1][1]['item']
但这只有在我能够以这种形式构建初始数组时才有可能。
【问题讨论】:
-
所有标题都是单行的吗?这是仅在一个页面上还是有多个页面并且您根据这些索引进行搜索?
-
标题确实是一行,但那部分我使用正则表达式来提取章节部分。所以这行得通。我基本上构建的是一个表单,它使用索引数组为每个章节或章节部分构建一个复选框列表。但我不想搜索数组并比较键来查找子章节。因此,如果我选择 3.1,我会检查 3.1.1、3.1.2,因为密钥以 3.1 开头,所以我知道要打印它。更快的是能够做到这一点:选择 3.1.1 => return $chapters[3][1][1]['item'] 但这只有在我能够以这种形式构建初始数组时才有可能。跨度>
标签: php arrays multidimensional-array indexing