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



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

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

我也将有一个返回字符串,类似于:

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

我正试图找到一种方法来循环并将$字符串更改为:

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

但是,它也应该与交换$row和$string一起工作。与$price和##price##一样,对于订阅项,可能会更改为$year和##year##。我不介意创建一个键/值对,将$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 ?>

我不需要查询DB或其他任何东西的帮助,除了如何切换$string中的##标签与$row中的数据。如有任何帮助,不胜感激。

编辑:在这一点上,我很高兴只是给出一些关于什么系统替换格式化的##标签##像这样将被称为,所以我可以试着在github上找到一个例子。

使用str_replace()和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" => "$16" );
$string = "Take off ##percent## our newly released ##name## at just ##price## for the set!";  
$tagline = replace_tags( $row, $string );
echo $tagline;
?>

最新更新