我正在尝试遍历每个[footnote]
并将其替换为一些HTML。以下是一些示例文本:
Hello [footnote], how are you [footnote], what are you up to [footnote]?
使用preg_match_all创建计数:
$match_count = preg_match_all("/\[footnote]/", $content);
然后我将此计数用作循环,以使用适当的HTML查找和替换文本:
for ($i=0; $i < $match_count; $i++) {
$new_content = str_replace('[footnote]', "<span class='footnote'>$i</span>", $content);
}
然而,之后,当echo $new_content;
每个[footnote]
具有相同的数字时, 2 :
<span class="footnote">2</span>
<span class="footnote">2</span>
<span class="footnote">2</span>
有人知道为什么这个数字没有递增吗?这就是我想要的
<span class="footnote">1</span>
<span class="footnote">2</span>
<span class="footnote">3</span>
答案 0 :(得分:1)
你可以这样做
$i = 0;
preg_replace_callback('/[footnote]/', 'replaces_counter', $content);
function replaces_counter($matches) {
global $i;
return "<span class='footnote'>".$i++."</span>";
}
答案 1 :(得分:0)
str_replace
一次取代所有内容,您需要preg_replace
支持$limit
(=要替换的数量):
$content = "Hello [footnote], how are you [footnote], what are you up to [footnote]?";
$i = 0;
do {
$i++;
$content = preg_replace('~\[footnote\]~', "<span>$i</span>", $content, 1, $count);
} while($count);
print $content;
请注意,第五个参数$count
会使您的点钞代码变得多余 - 我们会继续更换,直到无法再进行更换为止。
答案 2 :(得分:0)
由于您尝试替换文字字符串,因此可以避免使用正则表达式。例如:
$str = 'Hello [footnote], how are you [footnote], what are you up to [footnote]?';
$arr = explode('[footnote]', $str);
$count = 1;
$result = array_reduce($arr, function ($carry, $item) use (&$count) {
return (isset($carry))
? $carry . '<span class="footnote">' . $count++ . '</span>' . $item
: $item;
});
print_r($result);