PHP - строковая переменная сбрасывается за пределы цикла

1

может быть, это просто глупый вопрос, но я как бы застрял на этом :(

Я хочу сделать несколько изменений в строке за какое-то время. Но он сбрасывается, если он снова запускает цикл.

Вот мой код (упрощенный для лучшего понимания):

    $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, только изменения последнего цикла вступят в силу. Поэтому я хочу, чтобы строка была заменена шаг за шагом.

Заранее благодарю за ваше время и ответы :)

  • 0
    Вы на самом деле не меняете $ string, а $ new_string; и перезаписывает предыдущие изменения в $ new_string с каждой последовательной итерацией
Теги:
string
loops
while-loop
str-replace

1 ответ

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). 

Во всяком случае, вы не назначаете какой-либо прогресс, достигнутый в цикле, вашей строковой переменной, и это ваша проблема.

  • 0
    Привет, Аурис! Это имеет смысл;) str_replace меняет переменную $ string. Но после завершения всего цикла вступает в силу только последнее изменение: P Это моя проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню