用存储在数组中的变量替换字符串

时间:2013-05-14 16:13:00

标签: php

好的,所以我不确定我的语法,我确实认为逻辑是自解释的,但我不确定preg_replace是否有效,或者是否需要循环来获得最终结果。

$string = $randomizer->fecthRandomPhrase($cfg['seo']['meta']['descriptions']['single'], 3, $_SERVER['REQUEST_URI']);

返回一个像这样的字符串

  

Lorem ipsum dolor sit amet,[address1],[address2],[postcode]。奉献精神。 Mauris id dui sem,eget laoreet tellus。 Vivamus lacinia vestibulum odio a lobortis - [region]

然后我在字符串中搜索我想要更改的部分;

$find = array('[address1]','[address2]','[postcode]','[region]');

然后我将这些变量中存储的信息拉出来并放在一个数组中;

$replace = array($ADDRESS1,$ADDRESS2,$POSTCODE,$region);

在返回之前,我应用preg_replace来交换我存储的信息

$phrase = preg_replace($find,$replace,$string);

我是否需要遍历数组$ replace以允许读取每个变量并使替换工作或我是否完全使用了错误的函数?

3 个答案:

答案 0 :(得分:2)

str_replace()可以将数组作为前两个参数,您可能需要考虑这一点。否则,您需要为$find形成一个正确的正则表达式,以便只调用preg_replace()一次,这是您目前没有做的。

用法:

$phrase = str_replace( $find, $replace, $string);

现在$phrase包含您想要的输出。

答案 1 :(得分:2)

像这样使用PHP的str_replace函数

str_replace(array($your_replacement_array), array($your_replace_array), $string);

因此你想要的是这个

str_replace(array('[address1]','[address2]','[postcode]',['region']), array($ADDRESS1,$ADDRESS2,$POSTCODE,$region), $string);

答案 2 :(得分:0)

strtr也很有用。

在以下情况下,只有strtr可以检测到。

$text = 'SonyEricsson is based in British, but Sony is based in Japan';

str_replace函数

代码:

$search  = array(
    'SonyEricsson',
    'Sony',
);
$replace = array(
    '<a href="http://www.SonyEricsson.com">SonyEricsson</a>',
    '<a href="http://www.Sony.com">Sony</a>',
);
echo str_replace($search,$replace,$text);

结果:

<a href="http://www.<a href="http://www.Sony.com">Sony</a>Ericsson.com"><a href="http://www.Sony.com">Sony</a>Ericsson</a> is based in British, but <a href="http://www.Sony.com">Sony</a> is based in Japan

strtr函数的效率

代码:

$replace_pairs = array(
    'SonyEricsson' => '<a href="http://www.SonyEricsson.com">SonyEricsson</a>',
    'Sony'         => '<a href="http://www.Sony.com">Sony</a>',
);
echo strtr($text,$replace_pairs);

结果:

<a href="http://www.SonyeEricsson.com">SonyEricsson</a> is based in British, but <a href="http://www.Sony.com">Sony</a> is based in Japan