【问题标题】:Create a foreach-loop on search and replace在搜索和替换上创建一个 foreach 循环
【发布时间】:2014-09-06 15:59:02
【问题描述】:

我目前有一个用于我的 WordPress 网站的脚本,它找到了一个 <h3>-tag 并在其中添加了一个 id

<?php 
    $phrase = get_the_content();
    $phrase = apply_filters('the_content', $phrase);
    $replace = '<h3 id="thetag">';

    echo str_replace('<h3>', $replace, $phrase);
?>

我想为每个&lt;h3&gt; 标签添加一个id="$i++"

我想过这个,但这给了我一个 foreach 错误:

<?php 
    $phrase = get_the_content();
    $phrase = apply_filters('the_content', $phrase);
    $tag='<h3>';
    $i=0;
    foreach ($tag as $replace){
        $replace = '<h3 id="'.$i++.'">';
        echo str_replace($tag, $replace, $phrase);
    }
?>

错误:Warning: Invalid argument supplied for foreach() in...

有什么想法吗? M.

【问题讨论】:

  • $i=o;
  • 不会发生字符串上的 foreach 循环。您应该首先找到一种可以抓取您的内容的方法。然后对该方法的响应使用 foreach。
  • @Michal-sk웃 Thnx。我会先尝试一下

标签: php wordpress loops foreach add


【解决方案1】:

在 str_replace 函数中,第三个参数是一个输出变量,用于检查执行了多少次替换。使用 preg_replace 函数:

<?php 
    $phrase = get_the_content();
    $phrase = apply_filters('the_content', $phrase);
    $tag='<h3>';
    $i=0;
    $c = substr_count($phrase, $tag);
    for($i=0; $i<$c; $i++){
        $replace = '<h3 id="'.$i.'">';
        $phrase = preg_replace('/'.$tag.'/', $replace, $phrase, 1);
    }
    echo $phrase;   
?>

【讨论】:

  • 是这一行:echo preg_replace($tag, $replace, $phrase, 1);我们必须用新值替换 $phrase 字符串。请使用这个: $phrase = preg_replace($tag, $replace, $phrase, 1);回声$短语;
  • 不错。然而这只适用于第一个&lt;h3&gt;。我猜出了点问题,因为有一些丢失的 > 和 这是一个 H3 标题”。 FireBug 给了我这个:>这是一个 H3 标题

    这是另一个

  • 同样的结果。你能解释一下“1”在 preg_replace(); 中的作用吗?
  • preg_replace 中的第三个参数定义了有多少个

    将替换为新值。

  • 谢谢。我试图输入错误但没有错误:-(顺便说一句,它重复页面的内容 6 次.....?每次重新加载内容时 $i++ 添加 1
【解决方案2】:

你首先需要得到一个所有标签的数组,你在一个字符串上做一个 foreach。

foreach(array("<h3>","<h3>") as $replace){
...
}

我没有对此进行测试,但这将帮助您摆脱困境。 :-)

问候。

【讨论】:

  • 是的,但我首先需要一个循环来执行此操作,因为我不知道会有多少&lt;h3&gt;\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 2019-04-04
  • 2018-08-20
  • 1970-01-01
  • 2013-05-19
  • 2017-01-13
相关资源
最近更新 更多