2014-10-08 1 views
2

Добрый день! Укажите, по какой-либо причине, если число больше 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> 
+0

Решение будет выполнять цикл в обратном порядке, от 68 до 0. – EpicVoyage

+0

OMG спасибо! много – user2771604