使用PHP可以检测一个元素是否有两次不间断的出现


Using PHP is there a way to detect if there are two uninterrupted occurrences of an element?

这对我来说是一个很难正确拼写的问题,但我试图在段落之间动态插入一个ASIDE[特别是一个"特别感谢"注释]。最初,我决定在第二段之后使用substra_count()来删除它。我正在浮动这个块,所以如果它所要处理的只是文本内容,就没有问题用词包装它。然而,如果它与图像、PRE或其他任何东西相邻,它就会变得不稳定。

无论如何,我想做的是检测何时第一次出现两个相邻的段落,并在它们之间插入我的旁白。即:

<p> Here is the first paragraph. </p>
<aside> INSERT THIS HERE </aside>
<p> Here is the second paragraph. </p>

思想是值得赞赏的。

更新:我当前使用的substra_count()

因为我因为没有显示原始代码而被投票否决,所以我会在下面发布它。我使用Wordpress,但这不是WP特定的问题,因为我将_content()作为字符串,计算P的出现次数,并在其中插入自定义字段。这最终不是我想做的,但我想计算两个并发的P,并在它们之间插入这个字段。它的格式可能很奇怪,当然,当我的编辑器中的c/p到处都是的时候。

$thanks = get_post_meta(get_the_ID(), 'thanks', true);
if (!$thanks) {
  the_content();
}
else {
  $show_after_p = 0;
  $content = apply_filters('the_content', $post->post_content);
  if(substr_count($content, '<p>') > $show_after_p) {
$contents = explode("</p>", $content);
$p_count = 0;
foreach($contents as $content)
     {
   echo $content;
   if($p_count == $show_after_p)
  {
?>
<aside class="thanks clearfix">
    <p>
      <?php echo '<span>Special thanks: </span>'.$thanks; ?>
    </p>
</aside>
<?php } 
echo "</p>";
$p_count++;
}
}
}
?>

为什么不是JS好吧,javascript肯定可以做到这一点,但如果我能在PHP中做到这一步,那就yahtzee。

使用正则表达式和preg_replace-搜索:(closing of P){whitespaces (if any)}(opening P)并将空格更改为文本。

类似的东西:

 $content = preg_replace('#</p>'s*<p#', "</p><aside> INSERT THIS HERE </aside><p", $content);

感谢耶日·扎瓦兹基的灵感。如果您参考原始代码,我会使用explode()在P标记处对内容进行分段。现在我使用preg_split()如下:

$contents == preg_split('#</p>'s*<p>#', $content); // Thanks Jerzy
$i = 0;
foreach ( $contents as $content ) { 
  echo $content;
  if ( $i == $show_after_p ) { // this is set to 0 right now
    // insert aside here
  }
  echo "<p>";
  $i++;
 }
}

据我所知,这只会在有并发段落且没有空格/图像/其他元素的片段中分解内容。在第一个连接处,我插入旁白。然后内容显示为正常。