我有一个像
这样的字符串 "subscription link :%list:subscription%
unsubscription link :%list:unsubscription%
------- etc"
和
我有一个类似
的数组 $variables['list']['subscription']='example.com/sub';
$variables['list']['unsubscription']='example.com/unsub';
----------etc.
我需要用$ variables ['list'] ['subscription']替换%list:subscription%,依此类推
这里list
是第一个索引,subscription
是$ variable的第二个索引
。可以使用eval()
吗?我不知道这样做,请帮帮我
答案 0 :(得分:2)
Str替换应该适用于大多数情况:
foreach($variables as $key_l1 => $value_l1)
foreach($value_l1 as $key_l2 => $value_l2)
$string = str_replace('%'.$key_l1.':'.$key_l2.'%', $value_l2, $string);
Eval分配了一个资源密集型的新PHP流程 - 所以除非你为eval做了一些严肃的工作,否则会让你失望。
除了速度问题,如果代码的来源来自公共用户,也可以利用evals。
答案 1 :(得分:0)
您可以将字符串写入文件,将字符串包含在文件中的函数定义中,并为文件提供.php扩展名。
然后在当前模块中包含php文件并调用将返回数组的函数。
答案 2 :(得分:0)
我会使用正则表达式并按照这样做:
$stringWithLinks = "";
$variables = array();
// your link pattern, in this case
// the i in the end makes it case insensitive
$pattern = '/%([a-z]+):([a-z]+)%/i';
$matches = array();
// http://cz2.php.net/manual/en/function.preg-replace-callback.php
$stringWithReplacedMarkers = preg_replace_callback(
$pattern,
function($mathces) {
// important fact: $matches[0] contains the whole matched string
return $variables[$mathces[1]][$mathces[2]];
},
$stringWithLinks);
你可以在内部写出模式,我只是想让它更清晰。检查PHP手册以获得更多正则表达式。我使用的方法是:
http://cz2.php.net/manual/en/function.preg-replace-callback.php