替换PHP模板中的占位符[client_name]



我正在开发一个发票系统,可以选择设计模板并将html代码保存到数据库。

现在我在阶段实现一个模板的前端用户。现在发票数据使用foreach循环来自数据库。我被困在如何获得值来取代占位符在这种情况下。下面是从我的模板中提取的代码:

<tbody>
<?php
for ($i = 0; $i <= 5; $i++) {
?> 
<tr>
<td class="total-rown"><?php echo "[course_no_{$i}] "; ?></td>
<td class="total-rown"><?php echo "[product_{$i}] "; ?></td>
<td class="total-rown"><?php echo "[delegates_no_{$i}] "; ?></td>
<td class="total-rown"><?php echo "[price_{$i}] [curr]"; ?></td>
<td class="total-rown"><?php echo "[total_{$i}] [curr]"; ?></td>
</tr>
<?php
}
?> 
...

当用户生成pdf格式的发票时,如何将上面的动态占位符替换为发票数据库表中的实际值。

您想要实现的目标有点不清楚。如果要使用复合变量名,只需将它们连接起来然后打印即可。例如:

<td class="total-rown"><?php  echo $row["total_{$i}"] . ' ' . $row['curr']; ?></td>

(其中$row-是与数据库中的值相关联的数组)等。

但是如果你想将任意值替换为任意模式(例如,占位符用方括号表示),你可以使用带回调函数的正则表达式,如下例所示:

<?php
// Function
function str_substitute($pattern, $values) {
return preg_replace_callback(
'/[(.*?)]/',
function ($matches) use ($values) {
// $matches[0] - the whole found string (including braces)
// $matches[1] - the expression inside first parentheses (without braces)
return array_key_exists($matches[1], $values) ? $values[$matches[1]] : $matches[0];
},
$pattern
);
}

// List of values
$values = [
'total' => 1234,
'curr' => 'USD'
];
// Usage
print str_substitute('[total] [curr] [wrongvalue]', $values);
// Prints: 1234 USD [wrongvalue]

最新更新