В цикле формируется значение цен, примерно так:
$n=0;
$pricesArray - массив цен
$cell = '<td><input type="text" class="input-text" name="{{cellname}}" value="{{val}}"></td>'
for($i=0; $i < $countColumns; $i++){
//$pricesArray[$n]['prices'][$i] - значение примерно такое 15.09
$value = sprintf("%01.2f", $pricesArray[$n]['prices'][$i]);
$value = '$' . $value;
$cell = preg_replace('/{{val}}/',$value, $cell);
}
в результате на каждой итерации вместо значения {{val}} должно быть такое: $15.09, а получается такое: .09
Как правильно добавлять знак доллара к цене?
Шаблон {{val}} не содержит никаких регулярных выражений, поэтому использование preg_replace бессмысленно, достаточно сделать:
$cell = str_replace('{{val}}', $value, $cell);
Что касается preg_replace то выражение $15 в замене считается получением 15-й группы из совпадения. Естественно у вас такой нет, поэтому надо экранировать $:
$value = '\$' . $value;
$cell = preg_replace('/{{val}}/', $value, $cell);
Пример с обоими вариантами - https://3v4l.org/Er3l9
Проблема в использовании preg_replace. Это не только утяжеляет код, но и приводит к такой ошибке. Нужно заменить
$cell = preg_replace('/{{val}}/',$value, $cell);
на
$cell = str_replace('{{val}}',$value, $cell);
Продвижение своими сайтами как стратегия роста и независимости