есть переменная в ней хранится вот такой к примеру текст PHP: $description_avito ="{objname} толщиной {fat} применяется как облицовочный материал для потолков, стен, ограждений и т.д., а также в качестве кровельного покрытия"; есть переменная PHP: $objname="Профнастил Н10-40 "; $fat="0.5 мм "; как мне сделать вывод echo $description_avito; чтобы получилось Профнастил Н10-40 толщиной 0.5 мм применяется как облицовочный материал для потолков, стен, ограждений и т.д., а также в качестве кровельного покрытия т.е преобразовывать то что в {} в переменную.
PHP: $description_avito = "{objname} толщиной {fat} применяется как облицовочный материал для {test} потолков, стен, ограждений и т.д., а также в качестве кровельного покрытия"; $objname = "Профнастил Н10-40 "; $fat = "0.5 мм "; echo buildMessage($description_avito, compact('objname', 'fat')); function buildMessage(string $message, array $data): string { return preg_replace_callback( '/{(.*?)}/i', fn($matches) => $data[$matches[1]] ?? $matches[0], $message ); }
Спасибо тебе за ответы. Может у кого то тоже будут такие же вопросы, как у меня. Еще интересна работа функции fn($matches). Хотелось бы понять, для чего она используется.
preg_replace_callback - нужно передать callback-функцию, которой будет передан массив совпавших элементов из строки. Callback-функция должна вернуть строку с заменой.
Замените ваш "к примеру текст" на такой Код (Text): $description_avito ="%2$s толщиной %1$s применяется как облицовочный материал для потолков, стен, ограждений и т.д., а также в качестве кровельного покрытия"; И тогда не придется прибегать к g-кодингу Вот всё, что вам понадобится PHP: <?php $description_avito = "%1$s толщиной %2$s применяется как облицовочный материал для потолков, стен, ограждений и т.д., а также в качестве кровельного покрытия"; $objname = "Профнастил Н10-40 "; $fat = "0.5 мм "; printf($description_avito, $objname, $fat); ?>
При всей простоте и эффективности оба эти способа не дают дружественного способа написания шаблона страницы. Можете кидать в меня тухлыми яйцами, но {...} внутри тегов гораздо проще в написании.
Кстати, косяк. В коде выше, где printf(), значение $description_avito нужно заключать в одинарные кавычки или же экранировать символ $ Типа Код (Text): $description_avito = "%1\$s толщиной %2\$s применяется как облицовочный материал для потолков, стен, ограждений и т.д., а также в качестве кровельного покрытия"; --- Добавлено --- Не буду. Через это все проходят