Поскольку вы изменяете значение внутри массива ($array[$k]
), но затем продолжаете вносить изменения, используя устаревшее значение $v
в качестве отправной точки вместо значения, которое вы уже достигли.
Самый простой способ исправить это - выполнить цикл со ссылкой:
foreach($array as &$v) { // Note &$v
if(stripos($v, 'src=')!==false) {
// You can now modify $v directly and the changes will
// "stick" because you are looping by reference.
$v = str_replace('src="'.$this->getBadPathPart(), 'src="'.$d, $v);
}
if(stripos($v, 'href=')!==false) {
$v = str_replace('href="'.$this->getBadPathPart(), 'href="'.$d, $v);
}
}
В качестве альтернативы, вы можете сохранить существующий код, но изменить каждое назначение, чтобы также обновить $v
:
$array[$k] = $v = str_replace(...);