PHP - 字符串变量在循环时重置

时间:2015-11-12 16:46:46

标签: php string loops while-loop str-replace

也许这只是一个愚蠢的问题,但我有点卡在这上面:(

我想在一段时间内对字符串进行多次更改。但是如果它再次启动循环就会重置。

这是我的代码(为了更好地理解而简化):

    $string = '<a href="1"></a>_<a href="2"></a>_<a href="3"></a>';
    $offset = 0;
    $i = 1;
    while($i<=3){ 

        $start = strpos($string, '<a href="', $offset);

        $end = strpos($string, '</a>', $offset)+4;

        $sub_string = substr($string,$start,($end-$start));

        $new_string = str_replace($sub_string,'<a data-filter=""></a>',$string);
        echo $i.".: ".htmlentities($new_string)."<br>";

        $offset = $end;      

        $i++;            
    }

循环中的回显出以下内容:

1.: <a data-filter=""></a>_<a href="2"></a>_<a href="3"></a>
2.: <a href="1"></a>_<a data-filter=""></a>_<a href="3"></a>
3.: <a href="1"></a>_<a href="2"></a>_<a data-filter=""></a>

我的问题是我希望字符串不被重置(我认为这会发生在while循环之外声明的字符串吗?)

最终结果应为:

<a data-filter=""></a><a data-filter=""></a><a data-filter=""></a>

如果我在while循环后回显字符串,则只有最后一个循环的更改才会生效。所以我希望逐步替换字符串。

提前感谢您的时间和答案:)

1 个答案:

答案 0 :(得分:0)

你的$ string变量未在循环中使用(未设置),你设置和回显的是$ new_string。根据您的预期输出,您可能希望使用以下内容:

$string = $new_string or
$string .= $new_string or
$string[] = $new_string (for this you would have to declare your $string as array). 

无论如何,你没有将循环中的任何进展分配给你的字符串变量,这就是你的问题。