может быть, это просто глупый вопрос, но я как бы застрял на этом :(
Я хочу сделать несколько изменений в строке за какое-то время. Но он сбрасывается, если он снова запускает цикл.
Вот мой код (упрощенный для лучшего понимания):
$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, только изменения последнего цикла вступят в силу. Поэтому я хочу, чтобы строка была заменена шаг за шагом.
Заранее благодарю за ваше время и ответы :)
ваша строковая переменная $ 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).
Во всяком случае, вы не назначаете какой-либо прогресс, достигнутый в цикле, вашей строковой переменной, и это ваша проблема.