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

时间:2013-07-28 00:17:37

标签: php

这对我来说是一个难以正确说出的问题,但我试图在段落之间动态插入ASIDE [具体而言,只是一个“特别感谢”注释]。最初我决定使用substr_count()在第二段后删除它。我正在浮动这个块,所以如果所有它必须处理的是文本内容,那么没有问题包装它。但是,如果它在图像或PRE或其他任何地方附近运行,它就会变得不稳定。

无论如何,我想要做的是检测何时出现第一次出现的两个相邻段落并将其置于其间。即:

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

我们对此表示赞赏。

更新:我正在使用的substr_count()。

因为我因未显示原始代码而被拒绝,所以我将在下面发布。我正在使用Wordpress,但这不是WP特定的问题,因为我将the_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。

2 个答案:

答案 0 :(得分:1)

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

类似的东西:

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

答案 1 :(得分:0)

感谢Jerzy Zawadzki获得灵感。如果您参考原始代码,我会使用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++;
 }
}

据我所知,这只会在有并发段落且没有空白/图像/其他元素的段中破坏内容。在第一个交叉点,我把它放在一边。然后内容正常显示。