preg_replace()数字到数组项

时间:2015-09-08 11:49:17

标签: php regex string preg-replace

我有这个阵列:

<?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]。任何帮助表示赞赏。

2 个答案:

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