PHP 循环使用 preg_replace 或 sprintf 将 MYSQL 数据与字符串中的标签交换为 ##tag## 格式

PHP Loop using preg_replace or sprintf to swap MYSQL data with tags inside a string in ##tag## format

假设我有一个从数据库返回的数组:

$row = array("percent" => "33%", "name" => "30 Cups", "price" => "");

我还会有一个返回的字符串,类似于:

$string = "Take ##percent## off our newly released ##name## at just ##price## for the set!"

我正在尝试找到一种循环并将 $string 更改为的方法:

Take 33% off our newly released 30 Cups at just  for the set!

但是,它也应该与切换后的 $row 和 $string 一起使用。对于订阅项目,$price 和##price## 可能会更改为 $year 和 ##year##。我不介意创建一个 key/value 对来将 $year 分配给 ##year## 或者让它通过代码知道 ##year## 是 $year。

想法是其他人可能会创建一个字符串:

$string = "XMAS is here and we have a ##percent## off deal on ##name##, hurry while supplies are still in stock!"

所以页面中的PHP代码永远不会改变。它只会有类似的东西:

<?= $tagline ?>

除了如何用 $row 中的数据切换 $string 中的 ##tags## 之外,我不需要查询数据库或其他任何帮助。任何帮助将不胜感激。

编辑:在这一点上,我很高兴能得到一些关于像这样的替换格式化##tags## 的系统的想法,这样我就可以尝试在 github.

使用str_replace() and array_keys()

<?php

/**
 * replace_tags()
 * 
 * @param array $row
 * @param string $string
 * @return string
 */
function replace_tags( $row, $string ) {

    if( is_array( $row ) && !empty( $row) ) {

        $tags = array();
        $keys = array_keys( $row );

        foreach( $keys as $tag ) : $tags[] = '##' . $tag . '##'; endforeach;

        $string = str_replace( $tags, $row, $string );
    }

  return $string;   
}

$row = array( "percent" => "33%", "name" => "30 Cups", "price" => "" );

$string = "Take off ##percent## our newly released ##name## at just ##price## for the set!";  

$tagline = replace_tags( $row, $string );

echo $tagline;

?>