用数组php计算字符串

时间:2014-03-01 09:27:55

标签: php arrays string eval

我有一个像

这样的字符串
       "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()吗?我不知道这样做,请帮帮我

3 个答案:

答案 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