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'";
}
我已经对此进行了测试,它适用于您提供的案例:
$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);
}
我有这个 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'";
}
我已经对此进行了测试,它适用于您提供的案例:
$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);
}