Php 如何在每五次出现另一个字符串后插入该字符串?

Php 如何在每五次出现另一个字符串后插入该字符串?,php,replace,Php,Replace,我想使用PHP在字符的特定位置插入字符串,所以我有如下字符串: $string = " <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> <p>7</p> <p>8</p>

我想使用PHP在字符的特定位置插入字符串,所以我有如下字符串:

$string = "
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    <p>16</p>
    <p>17</p>
    ";
$string = "
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    [next] //appended bb code
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    [next] //appended bb code
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    [next] //appended bb code
    <p>16</p>
    <p>17</p>
    ";
我有一个案例,我有一篇博文需要在第五次

、第十次

、第十五次

之后分页。我尝试的是找到并获得每个

的位置编号,并在第十段(

时添加
[next]
bb代码)。这很有效

$string = "
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    <p>16</p>
    <p>17</p>
";
    $paginate = '[next]';
    $found = 0;
    
    for($i = 1; $i <= 99; $i++) {
        $paragraph = strpos($string, "</p>", $found);
        $found = $paragraph + 1;

        if ($i == 10) {
            $string = substr_replace($string, $paginate, $paragraph, 0);
        }
    }

    echo $string;

当我试图将bb代码每5的倍数追加一次时,我感到很困难,因此非常感谢您的帮助。

通过明智地使用
explode()
内爆()
和th模
%
操作符,您可以这样做

$string = 
"<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<p>11</p>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
";
$paginate = '[next]';

$lines = explode("\n", $string);

foreach ($lines as $i => $line) {  
    if ($i != 0 && $i % 5 == 0) {
        $new[] = $paginate;
    }
    $new[] = $line;
}

$string = implode("\n", $new);
echo $string;
$string=
“1

二,

三,

四,

五,

六,

七,

八,

九,

十,

十一,

十二,

十三,

十四,

十五

十六,

十七,

"; $paginate='[next]'; $lines=分解(“\n”,$string); foreach($i=>$line形式的行){ 如果($i!=0&&$i%5==0){ $new[]=$paginate; } $new[]=$line; } $string=内爆(“\n”,$new); echo$字符串;
结果

<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
[next]
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
[next]
<p>11</p>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
[next]
<p>16</p>
<p>17</p>
1

二,

三,

四,

五,

[下一页] 六,

七,

八,

九,

十,

[下一页] 十一,

十二,

十三,

十四,

十五

[下一页] 十六,

十七,


通过明智地使用
分解()
内爆()
和th模数
%
操作符,您可以这样做

$string = 
"<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<p>11</p>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
<p>16</p>
<p>17</p>
";
$paginate = '[next]';

$lines = explode("\n", $string);

foreach ($lines as $i => $line) {  
    if ($i != 0 && $i % 5 == 0) {
        $new[] = $paginate;
    }
    $new[] = $line;
}

$string = implode("\n", $new);
echo $string;
$string=
“1

二,

三,

四,

五,

六,

七,

八,

九,

十,

十一,

十二,

十三,

十四,

十五

十六,

十七,

"; $paginate='[next]'; $lines=分解(“\n”,$string); foreach($i=>$line形式的行){ 如果($i!=0&&$i%5==0){ $new[]=$paginate; } $new[]=$line; } $string=内爆(“\n”,$new); echo$字符串;
结果

<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
[next]
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
[next]
<p>11</p>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
[next]
<p>16</p>
<p>17</p>
1

二,

三,

四,

五,

[下一页] 六,

七,

八,

九,

十,

[下一页] 十一,

十二,

十三,

十四,

十五

[下一页] 十六,

十七,


将所有内容匹配到第五个

标记,然后使用
\K
将其全部忘记,然后注入您的bbcode

代码:()

或者完全尊重系统的换行顺序:

echo preg_replace('~(?:.+\K\R){5}~', "$0    [next]$0", $string);

将所有内容匹配到第五个

标记,然后使用
\K
将其全部忘记,然后注入您的bbcode

代码:()

或者完全尊重系统的换行顺序:

echo preg_replace('~(?:.+\K\R){5}~', "$0    [next]$0", $string);