некорректно работает str_replace («str_replace» вносит изменения в параметр $ replace)

Добрый день!
Укажите, по какой-либо причине, если число больше 10, то str_replace() вносит изменения в $replace параметр, режущие единицы и оставляющие только десятки?

Входные данные ($data):

...
<div onclick="window.location.href='/template-04.php?type=users&char=7';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=8';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=9';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=10';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=11';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=12';"></div>
...

очень просто PHP код:

for($axx = 0; $axx < 68; $axx ++)
{
$z = '['.$axx.']';

$newName = 'templ4-user-'.$z.'.html?'.$z;

echo '<br>'.$newName; // echo (axx = 13):  <br>templ4-user-[13].html?[13]

$data = str_replace('template-04.php?type=users&char='.$axx, $newName, $data);
}

Результат $data неверен. (if $axx > 10) Зачем?

...
<div onclick="window.location.href='/templ4-user-[7].html?[7]';"></div>
<div onclick="window.location.href='/templ4-user-[8].html?[8]';"></div>
<div onclick="window.location.href='/templ4-user-[9].html?[9]';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]0';"></div>   <------ !!!!!!!
<div onclick="window.location.href='/templ4-user-[1].html?[1]1';"></div>   <------ !!!!!!!
<div onclick="window.location.href='/templ4-user-[1].html?[1]2';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]3';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]4';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]5';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]6';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]7';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]8';"></div>
<div onclick="window.location.href='/templ4-user-[1].html?[1]9';"></div>
<div onclick="window.location.href='/templ4-user-[2].html?[2]0';"></div>
...

Пожалуйста помоги.

2

Решение

Это потому, что в первой итерации все 1 станут [1], что означает, что 12 станет [1]2 и никогда больше не будет соответствовать 12 против.

Вместо циклов вы можете использовать preg_replace:

$data = <<<EOS
<div onclick="window.location.href='/template-04.php?type=users&char=7';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=8';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=9';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=10';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=11';"></div>
<div onclick="window.location.href='/template-04.php?type=users&char=12';"></div>
EOS;

$pattern = '/template-04.php\?type=users&char=(\d+)/i';
$replacement = 'templ4-user-[$1].html?[$1]';
echo preg_replace($pattern, $replacement, $data);

Результат:

<div onclick="window.location.href='/templ4-user-[7].html?[7]';"></div>
<div onclick="window.location.href='/templ4-user-[8].html?[8]';"></div>
<div onclick="window.location.href='/templ4-user-[9].html?[9]';"></div>
<div onclick="window.location.href='/templ4-user-[10].html?[10]';"></div>
<div onclick="window.location.href='/templ4-user-[11].html?[11]';"></div>
<div onclick="window.location.href='/templ4-user-[12].html?[12]';"></div>
2

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

Других решений пока нет …

По вопросам рекламы [email protected]