Php 尝试preg_replace$1变量时,传递的参数无效错误
这是我收到的错误代码:Php 尝试preg_replace$1变量时,传递的参数无效错误,php,preg-replace,Php,Preg Replace,这是我收到的错误代码: $show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu$1']),$show_nav); 基本上,我想用子菜单数组中的数据替换$show_nav变量中的字符串,比如{$SUBMENU2}。我进行了测试,如果我手动输入以下数字,效果很好: $show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n"
$show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu$1']),$show_nav);
基本上,我想用子菜单数组中的数据替换$show_nav变量中的字符串,比如{$SUBMENU2}。我进行了测试,如果我手动输入以下数字,效果很好:
$show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu2']),$show_nav);
我还通过以下操作验证了正则表达式是否获取了正确的变量:
$show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#','$1',$show_nav);
它用{$SUBMENU}字符串中的内容替换字符串。所以如果它的{$subnum3}它给了我3,{$subnum5}它给了我5。但我似乎无法让它动态读取$1变量。我尝试添加了花括号,仍然是相同的错误:
$show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu{$1}']),$show_nav);
或:
我知道我输入的是错误的,但我想不出正确的方法。有什么建议吗
****更新****
感谢Toto和Wiktor Stribiżew提供的建议这是解决我问题的代码,再次感谢
$show_nav = preg_replace_callback(
'#\{\$SUBMENU([0-9]+)\}#',
function($m) use($sub_menu) {
if(isset($sub_menu['submenu' .$m[1]]))
{
return '<ul class="nav-dropdown">' .implode("\n",$sub_menu['submenu' .$m[1]]) .'</ul>';
}
},$show_nav);
你的朋友是:
$show_nav = preg_replace_callback(
'#\{\$SUBMENU([0-9]+)\}#',
function($m) use($sub_menu) {
return implode("\n",$sub_menu['submenu'.$m[$1]])
},
$show_nav);
你需要一个preg_替换_回调。啊,谢谢!当它让我接受你的答案时,我会接受的,再次感谢!
$show_nav = preg_replace_callback(
'#\{\$SUBMENU([0-9]+)\}#',
function($m) use($sub_menu) {
return implode("\n",$sub_menu['submenu'.$m[$1]])
},
$show_nav);