【问题标题】:Go to or create array index base an second array of indexnumbers转到或创建基于第二个索引号数组的数组索引
【发布时间】: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


【解决方案1】:

情况发生了变化,我们正在创建第二个数据库结构,该结构具有更好的设置来处理上述情况。

基本上,我们使用它来打印格式良好的 PDF 以及在票务系统的常见问题解答中推送信息。

这为我们提供了两全其美的优势,从而解决了上述问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2015-09-12
    相关资源
    最近更新 更多