Михаил Юдин

Рендер текстовых шаблонов по данным из массива PHP

Рендер текстовых шаблонов по данным из массива PHP
Выключите пожалуйста блокировку рекламы для этого сайта чтобы поддержать проект

Работая с текстовыми шаблонами для SEO например, встаёт задача использовать шаблоны строк, данные которых должны браться из массива.

Задача

Задача проста — воспользоваться шаблонами строк для отображения данных из массива. Сделать это можно несколькими способами:

  • сгенерировать текста в самом PHP
  • воспользоваться готовыми шаблонизаторами например Twig, Blade, Smarty, …
  • написать небольшую функцию для преобразования определённой подстроки в текст по данным из ассоциативного массива

Решение

Я предпочёл последний вариант, несмотря на подключенный Twig в проекте.

Первый вариант решения задачи выглядит следующим образом:

<?php

/**
 * PHP function to render string path template using nested array.
 * Renders template string like "Nested array item value: {data.some.nested.item.value}"
 * @param string $template
 * @param array $data
 * @return string
 */
public static function renderDataTemplate(string $template, array $data): string
{
  return preg_replace_callback('/{([^{}]+?)}/', static function ($v) use ($data) {
    $temp = &$data;
    foreach (explode('.', $v[1]) as $key) {
      $temp = &$temp[$key] ?? null;
      if ($temp === null) {
        return null;
      }
    }
    return $temp;
  }, $template);
}

Данная версия позволяет выполнять множественную замену вложенных шаблонов, применяя функцию несколько раз для шаблона вида:

{variables.{data.item.type}.{id}.name}

так как разворачивает только ближайшие фигурные скобки.

Актуальная версия функции PHP для рендера шаблона по данным из ассоциативного массива: PHP function to render string path template using nested array.


Поддержать




Выключите пожалуйста блокировку рекламы для этого сайта чтобы поддержать проект

Чтобы не пропускать новости, можно подписаться на email рассылку.


Остались вопросы или есть пожелания, замечания — пишите в комментарии:

Ещё почитать

Чеклист оптимизации скорости загрузки веб-приложения ✓

Чеклист оптимизации скорости загрузки веб-приложения ✓

Переход с PHPStorm или Intellij IDEA на VIM

Переход с PHPStorm или Intellij IDEA на VIM

Подсветка активных ссылок на чистом JavaScript

Подсветка активных ссылок на чистом JavaScript

Битва титанов: normalize.css против reset.css

Битва титанов: normalize.css против reset.css

CSS ищет баги в SEO: картинки без alt и внешние ссылки

CSS ищет баги в SEO: картинки без alt и внешние ссылки

Системные шрифты для веб 2019

Системные шрифты для веб 2019