最简洁的PHP模板引擎
最简洁的PHP模板引擎:
<?php
// 转换
$data = [
[
'name' => '第一行',
'type' => 'typec',
'items' => [
['name' => '名称a',],
['name' => '名称b']
]
],
[
'name' => '第二行',
'type' => 'typec2',
'items' => [
['name' => '名称c',],
['name' => '名称d']
]
]
];
$content = '
{foreach $data as $v}
{$v[\'name\']} -- {$v[\'type\']}{n}
{foreach $v[\'items\'] as $item}
{$item[\'name\']}{n}
{/foreach}
{/foreach}
';
function compile($tpl, $data) {
$filestr = '';
$keys = array(
'{if %%}' => '<?php if (\1): ?>',
'{elseif %%}' => '<?php ; elseif (\1): ?>',
'{for %%}' => '<?php for (\1): ?>',
'{foreach %%}' => '<?php foreach (\1): ?>',
'{while %%}' => '<?php while (\1): ?>',
'{/if}' => '<?php endif; ?>',
'{/for}' => '<?php endfor; ?>',
'{/foreach}' => '<?php endforeach; ?>',
'{/while}' => '<?php endwhile; ?>',
'{else}' => '<?php ; else: ?>',
'{continue}' => '<?php continue; ?>',
'{break}' => '<?php break; ?>',
'{$%% = %%}' => '<?php $\1 = \2; ?>',
'{$%%++}' => '<?php $\1++; ?>',
'{$%%--}' => '<?php $\1--; ?>',
'{$%%}' => '<?php echo $\1; ?>',
'{n}' => '<?php echo "\n"; ?>',
'{comment}' => '<?php /*',
'{/comment}' => '*/ ?>',
'{/*}' => '<?php /*',
'{*/}' => '*/ ?>',
);
foreach ($keys as $key => $val) {
$patterns[] = '#' . str_replace('%%', '(.+)', preg_quote($key, '#')) . '#U';
$replace[] = $val;
}
$filestr = preg_replace($patterns, $replace, $tpl);
eval('?>'.$filestr);
}
compile($content,$data);
执行结果 :
