str_replace()有3个不同的替换

时间:2017-02-20 10:55:17

标签: php wordpress str-replace

我有这个PHP代码,用于在WordPress中为<a>元素添加一个特定的类,然后从WordPress中清除所有其他元素:

<?php 

$menuParameters = array(
  'menu' => '40',
  'container'       => false,
  'echo'            => false,
  'items_wrap'      => '%3$s',
  'depth'           => 0,
);

$menu = strip_tags(wp_nav_menu( $menuParameters ), '<a>' );

$find = array('<a');
$replace = array('<a class="pro-link pro1"');
echo str_replace( $find, $replace, $menu );

?>

这个印刷品有点像这样:

<a class="pro-link pro1" href="link1">Link1</a>
<a class="pro-link pro1" href="link2">Link2</a>
<a class="pro-link pro1" href="link3">Link3</a>

问题在于我需要放置3个不同的类( pro1,pro2和pro3 ),并按照以下方式打印:

<a class="pro-link pro1" href="link1">Link1</a>
<a class="pro-link pro2" href="link2">Link2</a>
<a class="pro-link pro3" href="link3">Link3</a>

我怎么做?我需要迭代吗?

感谢您的帮助! :)

更新

它正在工作,但第一项仅打印“pro”,而下一个“pro1”,“pro2”。我试图更改 $ replacecounter 的值,但它不起作用。我需要解决这个问题,并且会很完美。

<?php 

$menuParameters = array(
  'menu' => '40',
  'container'       => false,
  'echo'            => false,
  'items_wrap'      => '%3$s',
  'depth'           => 0,
);

$replacecounter = 1;      

$menu = strip_tags(wp_nav_menu( $menuParameters ), '<a>' );                                                 

echo preg_replace_callback('/<a/', 'replaceCounter', $menu);

function replaceCounter() {
    global $replacecounter;
    $str="pro-link pro". $replacecounter++;
    return "<a class='$str'";
}

?>

2 个答案:

答案 0 :(得分:1)

您可以尝试:Thread使用preg_replace_callback。将调用每个匹配replaceCounter并返回替换值。

$replacecounter = 1;
$str='<a  href="link1">Link1</a>
<a  href="link2">Link2</a>
<a  href="link3">Link3</a>';
echo preg_replace_callback('/<a/', 'replaceCounter', $str);

function replaceCounter() {
    global $replacecounter;
    $str="pro-link pro". $replacecounter++;
    return "<a class='$str'";
}

DEMO

答案 1 :(得分:0)

我已对此进行了测试,它适用于您提出的案例:

$menu="<a href=\"link1\">Link1</a>
<a href=\"link2\">Link2</a>
<a href=\"link3\">Link3</a>
";

$tip="<a href";
$tiplen=strlen($tip);
for($x=1; $x<4; ++$x){
    $menu=substr_replace($menu,"<a class=\"pro-link pro$x\" href",strpos($menu,$tip),$tiplen);
}
echo $menu;

或者如果不是总是3个链接......

$x=0;
$tip="<a href";
$tiplen=strlen($tip);
while(strpos($menu,$tip)!==false){
    $menu=substr_replace($menu,"<a class=\"pro-link pro".++$x."\" href",strpos($menu,$tip),$tiplen);
}