我有这个阵列:
<?php
$menu = array(
9 => 'pages/contact/',
10 => 'pages/calender/jan/'
//...
);
?>
我有一个看起来像这样的字符串:
$string = "This is a text with a <a href="###9###">link</a> inside it.";
我想将###9###
替换为pages/contact/
。
我有这个:
$string = preg_replace("/###[0-9]+###/", "???", $string);
但我无法使用$menu[\\\1]
。任何帮助表示赞赏。
答案 0 :(得分:2)
有preg_replace_callback
的解决方案,但您可以构建一个数组,其中搜索的字符串与其替换字符串相关联,然后使用strtr
:
$menu = array(
9 => 'pages/contact/',
10 => 'pages/calender/jan/'
.... );
$keys = array_map(function ($i) { return "###$i###"; }, array_keys($menu));
$rep = array_combine($keys, $menu);
$result = strtr($string, $rep);
答案 1 :(得分:1)
为此你需要preg_replace_callback()
,你可以在每场比赛前应用回调函数,例如
$string = preg_replace_callback("/###(\d+)###/", function($m)use($menu){
if(isset($menu[$m[1]]))
return $menu[$m[1]];
return "default";
}, $string);