Здравствуйте. Я пытаюсь сделать на php свой шаблонизатор, сейчас я делаю цыклы. Вот пример цикла: Код (Text): [[ @times(5) ]] <p>{{ $message }}</p> [[ @times(#end) ]] Код выше просто выводит {{ $message }} пять раз. И все хорошо, но если использовать вложенные циклы, например: Код (Text): [[ @times(5) ]] [[ @times(2) ]] <p>{{ $message }}</p> [[ @times(#end) ]] [[ @times(#end) ]] то результат будет таким: Код (Text): [[ @times(5) ]] Hello world! Hello world! [[ @times(#end) ]] Как сделать чтобы внутренний цикл срабатывал нормально? Я использую следующий код обработки таких конструкций: Код (Text): public static function dirs($code, $data) { $pattern = '/\[\[\s*@([^\(]+)\(([^\)]+)\)\s*\]\]([^\[]+)\[\[\s*@([^\(]+)\(#end\)\s*\]\]/i'; return preg_replace_callback($pattern, function($value) use($data) { if($value[1] == 'times') return str_repeat($value[3], $value[2]); // $value[3] - строка <p>{{ $message }}</p>, $value[2] = 5; }, $expression); } Тут я просто ищу все конструкии такого вида [[ @times(n) ]] Some text... [[ @times(#end) ]], и вывожу их n раз Как сделать чтобы внутренний цикл срабатывал нормально? PS: Переменная $message равна "Hello world!"
Сделать компиляцию шаблона в PHP-файл, заменяя Код (Text): [[ @times(5) ]] на уникальные Код (Text): <?php for ($i1 = 0, $i1 < 5, $i1++): ?> и запуская этот файл через include.