【问题标题】:How to track the index of Table of Content in PHP如何在 PHP 中跟踪目录的索引
【发布时间】:2019-11-16 02:05:27
【问题描述】:

我正在尝试为文章内容创建目录。我现在面临的问题是这样的:

$section1 = "
<h2>1. Section 1 headline<h2>
<p>Lorem ipsum dolor sit amet, <strong>{$consectetur}</strong> adipiscing elit. Morbi id pharetra nunc. Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh. Sed nec finibus quam. Mauris vel erat tempor, egestas sapien at, interdum mauris. Cras at tortor sit amet lorem molestie mattis non vel nunc. Cras maximus enim eu dolor vestibulum venenatis et sed nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>"

$section1a = "
<h2>1.a Section 1a headline<h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi id pharetra nunc. Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh. Sed nec finibus quam. Mauris vel erat tempor, egestas sapien at, interdum mauris. Cras at tortor sit amet lorem molestie mattis non vel nunc. Cras maximus enim eu dolor vestibulum venenatis et sed nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>"

$section1b = "
<h2>1.b Section 1b headline<h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi id pharetra nunc. Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh. Sed nec finibus quam. Mauris vel erat tempor, egestas sapien at, interdum mauris. Cras at tortor sit amet lorem molestie mattis non vel nunc. Cras maximus enim eu dolor vestibulum venenatis et sed nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>"


$section2 = "
<h2>2. Section 2 headline<h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi id pharetra nunc. Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh. Sed nec finibus quam. Mauris vel erat tempor, egestas sapien at, interdum mauris. Cras at tortor sit amet lorem molestie mattis non vel nunc. Cras maximus enim eu dolor vestibulum venenatis et sed nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>"

我要输出:

目录:

  1. 第 1 节标题

    1.a 第 1a 节标题

    1.b 第 1b 节标题

  2. 第 2 节标题

  3. 第 3 节标题

1。第 1 节标题

Lorem ipsum dolor sit amet,variablevalue 肥胖精英。 Morbi id pharetra nunc。 Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh。 sed nec finibus quam。 Mauris vel erat tempor,egestas sapien at,interdum mauris。 Cras at tortor 坐在 amet lorem molestie mattis non vel nunc。 Cras maximus enim eu dolor vestibulum venenatis et sed nibh。 Lorem ipsum dolor sit amet, consectetur adipiscing elit。

1.a 第 1a 节标题

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Morbi id pharetra nunc。 Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh。 sed nec finibus quam。 Mauris vel erat tempor,egestas sapien at,interdum mauris。 Cras at tortor 坐在 amet lorem molestie mattis non vel nunc。 Cras maximus enim eu dolor vestibulum venenatis et sed nibh。 Lorem ipsum dolor sit amet, consectetur adipiscing elit。

1.b 1b 节标题

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Morbi id pharetra nunc。 Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh。 sed nec finibus quam。 Mauris vel erat tempor,egestas sapien at,interdum mauris。 Cras at tortor 坐在 amet lorem molestie mattis non vel nunc。 Cras maximus enim eu dolor vestibulum venenatis et sed nibh。 Lorem ipsum dolor sit amet, consectetur adipiscing elit。

2。第 2 节标题

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Morbi id pharetra nunc。 Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh。 sed nec finibus quam。 Mauris vel erat tempor,egestas sapien at,interdum mauris。 Cras at tortor 坐在 amet lorem molestie mattis non vel nunc。 Cras maximus enim eu dolor vestibulum venenatis et sed nibh。 Lorem ipsum dolor sit amet, consectetur adipiscing elit。

在 PHP 中动态跟踪目录索引的最佳方法是什么?我需要这些动态的原因是,如果有人决定不打印第 3 节,第 4 节将自动成为目录和正文中的第 3 节。

到目前为止我尝试了什么?

到目前为止,我尝试将我的变量包装在一个函数中。例如:

function section1output = ($tocindex,$consectetur) {
$section[1] = "
<h2>{$tocindex}. Section 1 headline<h2>
<p>Lorem ipsum dolor sit amet, <strong>{$consectetur}</strong> adipiscing elit. Morbi id pharetra nunc. Praesent imperdiet, libero eget pharetra posuere, eros odio sagittis ante, vel commodo nulla nisl nec nibh. Sed nec finibus quam. Mauris vel erat tempor, egestas sapien at, interdum mauris. Cras at tortor sit amet lorem molestie mattis non vel nunc. Cras maximus enim eu dolor vestibulum venenatis et sed nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>"
return $section1;
}

然后我会使用 for 循环来输出这些部分并同时生成目录。

但是,这让我的代码非常混乱,因为从发布数据中传递了大约 30 个变量。

有没有更好的方法来生成我所追求的动态目录?

【问题讨论】:

  • 您如何确定排除某个部分?我最初的想法是相应地重组 HTML Like jsfiddle.net/16hw3sn0/1 以类似于部分和子部分的层次结构。

标签: php variables scope


【解决方案1】:

首先你以数组格式排列标题和子标题,如下所示

$contents = [];
$contents[] = [
    'heading' => 'Main heading 1',
    'subHeading' => [
        'sub heading a',
        'sub heading b',
        'sub heading c',
    ]
];
$contents[] = [
    'heading' => 'Main heading 2',
    'subHeading' => [
        'sub heading a',
        'sub heading b',
        'sub heading c',
    ]
];

比您从此代码输出的目录

echo "<ol>";
foreach ($contents as $content) {
    echo "<li>";
    echo $content['heading'];
    if (isset($content['subHeading'])) {

        echo "<ol>";
        foreach ($content['subHeading'] as $subHeading) {
            echo "<li>$subHeading</li>";
        }
        echo "</ol>";
    }
    echo "</li>";
}
echo "</ol>";

上面代码的输出形式是

  1. 主标题 1
    1. 子标题a
    2. 子标题 b
    3. 子标题 c
  2. 主标题 2
    1. 子标题a
    2. 子标题 b
    3. 子标题 c

【讨论】:

    【解决方案2】:

    您可以尝试将内容存储在对象中

    $sections=array(
       array('headline'=>'Section 1 headline',
             'content'=>'content... '.$variable.'..more content.'
       ),
       array('headline'=>'Section 2 headline',
             'content'=>'more content....'
       ),
    );
    

    然后你可以遍历对象并跳过你想省略的内容。

    $content='';
    $omit=array(3,5);
    $count=1;
    foreach($sections as $section){
       if(!in_array($count,$omit)){
         $content.='<h2>'.$count.' '.$section['headline'].'</h2>';
         $content.='<p>'.$section['content'].'</p>';
       }
       $count++;
    }
    return $content;
    

    您可以对目录的“标题”进行相同的处理。

    【讨论】:

    • Sheesh,我在 JavaScript 上花了太多时间。无法弄清楚这段代码有什么问题。只需要使用 .运算符而不是 + 在您的答案中。除此之外,它看起来很整洁。
    • 天哪。是的。对不起。我只是在用javascript回答一个问题。哈哈。谢谢!将编辑答案。
    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多