我有一个字符串:
{ListingAgent First Name}
我已附上您的商家信息,{Property Address}。
和数组:
$listingAgent['fname'] = 'Bob';
$property['address'] = '123 street';
不知何故,我需要用$listingAgent['fname']
的值替换{ListingAgent First Name}
和{Prperty Address},其值为$property['address']
我需要一种方法来浏览字符串并查找所有{ListingAgent文本}并根据'text'替换它。它几乎就像一个关键值对。
我尝试了以下但是它只回应了第一个,我想我可能会咆哮错误的树
function getbetween($content,$start,$end) {
$r = explode($start, $content);
foreach ($r as $key => $val){
echo $key.'='.$val.'<br/>';
}
}
$text = $coverletter['cover_text'];
$start = '{';
$end = '}';
echo getbetween($text,$start,$end);
这给了我:
0 = 1 = ListingAgent名称}
我附上2 =物业地址}的报价。
可以通过4 = Agent Phone}或电话联系我的座席,3 =座席名称} 5 =代理商电子邮件}。
我期待与你达成这项协议。
6 =买方名字} 7 =买方姓氏}
答案 0 :(得分:1)
有很多方法可以做到这一点......首先,我假设你从数据库中获取信息,所以你可能会更好地考虑使用JOIN
和创建一个数组,而不是有两个单独的数组。
如果您的复杂键不遵循相同的模式(由下面的自动方法假设),您可以创建位置持有者和替换的索引数组,然后遍历该批次查找并替换所有相关数据。
$listingAgent['fname'] = 'Bob'; //Example array
$property['address'] = '123 Strret'; //Example array
$replacements = array(
'ListingAgent First Name' => $listingAgent['fname'],
'Property Address' => $property['address']
);
foreach($replacements as $positionHolder=>$replacementText){
$string = str_replace("{{$positionHolder}}", $replacementText, $string);
}
echo $string;
如果不知道所有keys
的格式/值,而是从显示的内容中进行推断,则无法创建完全自动化的功能:
$listingAgent['fname'] => {ListingAgent First Name}
$property['address'] => {Property Address}
例如,假设Buyer Last Name
看起来像:
$buyers['blastname'] => {Buyers Buyer Last Name}
您可以使用以下功能:
$listingAgent['fname'] = 'Bob'; //Example array
$buyers['blastname'] = 'Jones'; //Example array
$property['address'] = '123 Strret'; //Example array
function replaceStrings($matches){
global $property;
global $listingAgent;
global $buyers; //Add in all relevant arrays as globals
$matches[1][0] = strtolower($matches[1][0]);
$matches[2] = explode(' ', trim(strtolower($matches[2])));
if(count($matches[2]) > 1){
$matches[2][0] = $matches[2][0][0];
}
$matches[2] = implode($matches[2]);
return ${$matches[1]}[$matches[2]];
}
$string = preg_replace_callback('/\{([^ ]+)([^}]*)\}/', 'replaceStrings', $string);
echo $string;
JOIN
创建一个数组如果您从数据库获取数据并决定使用JOIN
,则可以将代码更新为:
$string = "
{fname}
I have attached an offer for your listing, {address}.
";
$replacementArray = array(
'fname' => 'Bob',
'address' => '123 Street',
);
foreach($replacementArray as $positionHolder=>$replacementText){
$string = str_replace("{{$positionHolder}}", $replacementText, $string);
}
echo $string;
在这种情况下,您显然必须在预定义文本中更新占位符,如$string
所示。
您也可以在不使用连接的情况下执行此操作,只需将其他阵列合并在一起即可轻松完成!
给出输入:
$string = "{ListingAgent First Name} I have attached an offer for your listing {Buyers Buyers Last Name}, {Property Address}.";
以上三种方法(他们称之为echo $string
)的输出都是相同的:
Bob I have attached an offer for your listing, 123 Street.
答案 1 :(得分:0)
您可以使用str_replace功能将令牌替换为实际值。
例如:
$text = $coverletter['cover_text'];
$text = str_replace("{ListingAgent First Name}", $listingAgent['fname'], $text);
$text = str_replace("{Prperty Address}", $property['address'], $text);