preg_replace() 数字到数组项

preg_replace() digits to an array item

我有这个数组:

<?php

    $menu = array(
        9 => 'pages/contact/',
        10 => 'pages/calender/jan/'
        //...
    );

?>

我有一个字符串,如下所示:

$string = "This is a text with a <a href="###9###">link</a> inside it.";

我想用 pages/contact/ 替换 ###9###

我知道了:

$string = preg_replace("/###[0-9]+###/", "???", $string);

但是我不能使用$menu[\]。感谢任何帮助。

为此您需要 preg_replace_callback(),您可以在其中为每个匹配项应用回调函数,例如

$string = preg_replace_callback("/###(\d+)###/", function($m)use($menu){
    if(isset($menu[$m[1]]))
        return $menu[$m[1]];
    return "default";
}, $string);

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