str_replace() 有 3 个不同的替换

str_replace() with 3 different replaces

我有这个 PHP 代码,用于将特定 class 添加到 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 个不同的 classes(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'";
}

?>

您可以试试这个:Thread using 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

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

$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);
}