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);
我有这个数组:
<?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);