str_replace () с 3 различными заменами

У меня есть этот код PHP для добавления определенного класса в <a> элемент в меню WordPress, прежде чем очистить все остальные элементы из 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'";
}

?>

0

Решение

Вы можете попробовать это:Нить с помощью 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

Другие решения

Я проверил это, и это работает для вашего представленного случая:

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector