2012-04-29 2 views
1

Я хочу сделать str_replace для строки HTML, каждый раз найдите элемент соответствия, значение также будет увеличиваться.PHP str_replace имеет разное значение каждый раз?

$link = 1; 

$html = str_replace($this->link, $link, $html); 

Это заменит все в один раз, и с тем же строкой $ ссылки, я хотел бы с увеличением $ ссылки каждый раз, когда он нашел матч. Является ли это возможным?

Большое спасибо

+4

Использование HTTP://php.net/manual/en/function.preg-replace-callback.php и увеличивайте счетчик в вашей функции обратного вызова. –

+0

Согласен с даном. Затем просто подсчитайте, сколько совпадений найдено. – Philip

ответ

1

Если я вас правильно понял (вы хотите, чтобы каждый матч заменен с ростом целого числа), казалось бы, замечания по этому вопросу призываю вас использовать preg_replace_callback бы правильно:

$str = 'Hello World'; 
$cnt = 0; 

function myCallback ($matches) { 
    global $cnt; 
    return ++$cnt; 
} 

// He12o Wor3d 
echo preg_replace_callback('/\l/', 'myCallback', $str); 
+0

этот myCallback, что, если его в классе? echo preg_replace_callback ('/ \ l /', $ this-> myCallback, $ str); не работает – Bruce

+1

'preg_replace_callback ('/ \ l /', array ($ this, 'myCallback'), $ text);' – Sampson

+0

preg_replace_callback ('/ \ l /', 'self :: myCallback', $ text) ; это работает также – Bruce

2

Вы можете использовать регулярные выражения, чтобы вернуться, сколько замен он делает.

<?php 
$string = "red green green blue red"; 

preg_replace('/\b(green)\b/i', '[removed]', $string, -1 , $results); 
echo $results; // returns '2' as it replaces green twice with [removed] 
?> 
+0

это возвращение 0 tho, попробуйте – Bruce

+0

это работает. забыл изменить имя переменной. Обновление ответа. – Menztrual

Смежные вопросы